annotate src/xterm.c @ 36283:7eede723f9ed

Update copyright notice.
author Gerd Moellmann <gerd@gnu.org>
date Thu, 22 Feb 2001 11:56:33 +0000
parents 94d6ad393a74
children 7fda58b1a204
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 /* X Communication module for terminals which understand the X protocol.
35068
e6fe439553cf Update copyright.
Gerd Moellmann <gerd@gnu.org>
parents: 35066
diff changeset
2 Copyright (C) 1989, 93, 94, 95, 96, 1997, 1998, 1999, 2000, 2001
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3 Free Software Foundation, Inc.
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5 This file is part of GNU Emacs.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 GNU Emacs is free software; you can redistribute it and/or modify
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8 it under the terms of the GNU General Public License as published by
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 555
diff changeset
9 the Free Software Foundation; either version 2, or (at your option)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10 any later version.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 GNU Emacs is distributed in the hope that it will be useful,
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15 GNU General Public License for more details.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 along with GNU Emacs; see the file COPYING. If not, write to
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 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
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
33 #ifdef HAVE_X_WINDOWS
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
34
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
42 /* This may include sys/types.h, and that somehow loses
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43 if this is not done before the other system files. */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
47 /* Load sys/types.h if not already loaded.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
48 In some systems loading it twice is suicidal. */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
49 #ifndef makedev
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
50 #include <sys/types.h>
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
51 #endif /* makedev */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52
16220
02044b05d8e0 Replaced symbol BSD with BSD_SYSTEM.
Karl Heuer <kwzh@gnu.org>
parents: 16209
diff changeset
53 #ifdef BSD_SYSTEM
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
54 #include <sys/ioctl.h>
16220
02044b05d8e0 Replaced symbol BSD with BSD_SYSTEM.
Karl Heuer <kwzh@gnu.org>
parents: 16209
diff changeset
55 #endif /* ! defined (BSD_SYSTEM) */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
56
3355
e0c2e8a2ef75 (XTread_socket, case KeyPress) [HPUX]: Test IsModifiedKey.
Richard M. Stallman <rms@gnu.org>
parents: 3284
diff changeset
57 #include "systty.h"
555
e09a318cf838 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 517
diff changeset
58 #include "systime.h"
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
59
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
60 #ifndef INCLUDED_FCNTL
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
61 #include <fcntl.h>
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
62 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
63 #include <ctype.h>
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
64 #include <errno.h>
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
65 #include <setjmp.h>
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
66 #include <sys/stat.h>
10366
5e8b43cd8e96 Don't include param.h.
Richard M. Stallman <rms@gnu.org>
parents: 10287
diff changeset
67 /* Caused redefinition of DBL_DIG on Netbsd; seems not to be needed. */
5e8b43cd8e96 Don't include param.h.
Richard M. Stallman <rms@gnu.org>
parents: 10287
diff changeset
68 /* #include <sys/param.h> */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
69
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
70 #include "charset.h"
30748
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
71 #include "coding.h"
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
72 #include "ccl.h"
23515
1e52542fb338 Include frame.h before fontset.h.
Kenichi Handa <handa@m17n.org>
parents: 23162
diff changeset
73 #include "frame.h"
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
74 #include "dispextern.h"
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
75 #include "fontset.h"
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
76 #include "termhooks.h"
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
77 #include "termopts.h"
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
78 #include "termchar.h"
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
79 #if 0
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
80 #include "sink.h"
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
81 #include "sinkmask.h"
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
82 #endif /* ! 0 */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
83 #include "gnu.h"
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
84 #include "disptab.h"
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
85 #include "buffer.h"
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
86 #include "window.h"
8652
c2c1a477ddd5 Include keyboard.h.
Richard M. Stallman <rms@gnu.org>
parents: 8634
diff changeset
87 #include "keyboard.h"
8848
48b3ac951c53 Add #include "intervals.h"
Karl Heuer <kwzh@gnu.org>
parents: 8781
diff changeset
88 #include "intervals.h"
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
89 #include "process.h"
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
90 #include "atimer.h"
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
91
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
92 #ifdef USE_X_TOOLKIT
15117
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
93 #include <X11/Shell.h>
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
94 #endif
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
95
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
96 #ifdef HAVE_SYS_TIME_H
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
97 #include <sys/time.h>
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
98 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
99 #ifdef HAVE_UNISTD_H
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
100 #include <unistd.h>
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
101 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
102
15117
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
103 #ifdef USE_X_TOOLKIT
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
104
30321
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
105 extern void free_frame_menubar P_ ((struct frame *));
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
106 extern struct frame *x_menubar_window_to_frame P_ ((struct x_display_info *,
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
107 int));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
108
13507
9a9f459075af (HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
109 #if (XtSpecificationRelease >= 5) && !defined(NO_EDITRES)
9a9f459075af (HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
110 #define HACK_EDITRES
6941
a914781ef58a (Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents: 6934
diff changeset
111 extern void _XEditResCheckMessages ();
13507
9a9f459075af (HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
112 #endif /* not NO_EDITRES */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
113
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
114 /* Include toolkit specific headers for the scroll bar widget. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
115
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
116 #ifdef USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
117 #if defined USE_MOTIF
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
118 #include <Xm/Xm.h> /* for LESSTIF_VERSION */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
119 #include <Xm/ScrollBar.h>
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
120 #include <Xm/ScrollBarP.h>
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
121 #else /* !USE_MOTIF i.e. use Xaw */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
122
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
123 #ifdef HAVE_XAW3D
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
124 #include <X11/Xaw3d/Simple.h>
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
125 #include <X11/Xaw3d/Scrollbar.h>
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
126 #define ARROW_SCROLLBAR
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
127 #include <X11/Xaw3d/ScrollbarP.h>
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
128 #else /* !HAVE_XAW3D */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
129 #include <X11/Xaw/Simple.h>
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
130 #include <X11/Xaw/Scrollbar.h>
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
131 #endif /* !HAVE_XAW3D */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
132 #ifndef XtNpickTop
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
133 #define XtNpickTop "pickTop"
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
134 #endif /* !XtNpickTop */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
135 #endif /* !USE_MOTIF */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
136 #endif /* USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
137
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
138 #endif /* USE_X_TOOLKIT */
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
139
6022
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
140 #ifndef USE_X_TOOLKIT
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
141 #define x_any_window_to_frame x_window_to_frame
6983
b18e5c09d7c3 (XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents: 6941
diff changeset
142 #define x_top_window_to_frame x_window_to_frame
6022
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
143 #endif
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
144
7602
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
145 #ifdef USE_X_TOOLKIT
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
146 #include "widget.h"
7602
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
147 #ifndef XtNinitialState
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
148 #define XtNinitialState "initialState"
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
149 #endif
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
150 #endif
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
151
14522
9cee3e7c6468 (min, max): Don't define if already defined.
Richard M. Stallman <rms@gnu.org>
parents: 14489
diff changeset
152 #ifndef min
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
153 #define min(a,b) ((a) < (b) ? (a) : (b))
14522
9cee3e7c6468 (min, max): Don't define if already defined.
Richard M. Stallman <rms@gnu.org>
parents: 14489
diff changeset
154 #endif
9cee3e7c6468 (min, max): Don't define if already defined.
Richard M. Stallman <rms@gnu.org>
parents: 14489
diff changeset
155 #ifndef max
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
156 #define max(a,b) ((a) > (b) ? (a) : (b))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
157 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
158
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
159 #define abs(x) ((x) < 0 ? -(x) : (x))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
160
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
161 #define BETWEEN(X, LOWER, UPPER) ((X) >= (LOWER) && (X) < (UPPER))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
162
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
163
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
164 /* Bitmaps for truncated lines. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
165
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
166 enum bitmap_type
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
167 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
168 NO_BITMAP,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
169 LEFT_TRUNCATION_BITMAP,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
170 RIGHT_TRUNCATION_BITMAP,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
171 OVERLAY_ARROW_BITMAP,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
172 CONTINUED_LINE_BITMAP,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
173 CONTINUATION_LINE_BITMAP,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
174 ZV_LINE_BITMAP
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
175 };
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
176
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
177 /* Bitmap drawn to indicate lines not displaying text if
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
178 `indicate-empty-lines' is non-nil. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
179
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
180 #define zv_width 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
181 #define zv_height 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
182 static unsigned char zv_bits[] = {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
183 0x00, 0x00, 0x1e, 0x1e, 0x1e, 0x1e, 0x00, 0x00};
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
184
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
185 /* An arrow like this: `<-'. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
186
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
187 #define left_width 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
188 #define left_height 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
189 static unsigned char left_bits[] = {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
190 0x18, 0x0c, 0x06, 0x3f, 0x3f, 0x06, 0x0c, 0x18};
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
191
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
192 /* Right truncation arrow bitmap `->'. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
193
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
194 #define right_width 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
195 #define right_height 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
196 static unsigned char right_bits[] = {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
197 0x18, 0x30, 0x60, 0xfc, 0xfc, 0x60, 0x30, 0x18};
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
198
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
199 /* Marker for continued lines. */
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
200
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
201 #define continued_width 8
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
202 #define continued_height 8
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
203 static unsigned char continued_bits[] = {
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
204 0x3c, 0x7c, 0xc0, 0xe4, 0xfc, 0x7c, 0x3c, 0x7c};
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
205
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
206 /* Marker for continuation lines. */
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
207
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
208 #define continuation_width 8
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
209 #define continuation_height 8
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
210 static unsigned char continuation_bits[] = {
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
211 0x3c, 0x3e, 0x03, 0x27, 0x3f, 0x3e, 0x3c, 0x3e};
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
212
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
213 /* Overlay arrow bitmap. */
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
214
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
215 #if 0
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
216 /* A bomb. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
217 #define ov_width 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
218 #define ov_height 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
219 static unsigned char ov_bits[] = {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
220 0x30, 0x08, 0x3c, 0x7e, 0x7a, 0x7a, 0x62, 0x3c};
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
221 #else
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
222 /* A triangular arrow. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
223 #define ov_width 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
224 #define ov_height 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
225 static unsigned char ov_bits[] = {
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
226 0x03, 0x0f, 0x1f, 0x3f, 0x3f, 0x1f, 0x0f, 0x03};
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
227
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
228 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
229
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
230 extern Lisp_Object Qhelp_echo;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
231
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
232
34869
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
233 /* Non-nil means Emacs uses toolkit scroll bars. */
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
234
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
235 Lisp_Object Vx_toolkit_scroll_bars;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
236
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
237 /* If a string, XTread_socket generates an event to display that string.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
238 (The display is done in read_char.) */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
239
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
240 static Lisp_Object help_echo;
30302
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
241 static Lisp_Object help_echo_window;
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
242 static Lisp_Object help_echo_object;
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
243 static int help_echo_pos;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
244
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
245 /* Temporary variable for XTread_socket. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
246
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
247 static Lisp_Object previous_help_echo;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
248
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
249 /* Non-zero means that a HELP_EVENT has been generated since Emacs
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
250 start. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
251
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
252 static int any_help_event_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
253
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
254 /* Non-zero means draw block and hollow cursor as wide as the glyph
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
255 under it. For example, if a block cursor is over a tab, it will be
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
256 drawn as wide as that tab on the display. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
257
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
258 int x_stretch_cursor_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
259
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
260 /* This is a chain of structures for all the X displays currently in
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
261 use. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
262
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
263 struct x_display_info *x_display_list;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
264
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
265 /* This is a list of cons cells, each of the form (NAME
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
266 . FONT-LIST-CACHE), one for each element of x_display_list and in
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
267 the same order. NAME is the name of the frame. FONT-LIST-CACHE
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
268 records previous values returned by x-list-fonts. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
269
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
270 Lisp_Object x_display_name_list;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
271
2474
86c8a6e08fd4 Fix typo in comment delimiter.
Richard M. Stallman <rms@gnu.org>
parents: 2468
diff changeset
272 /* Frame being updated by update_frame. This is declared in term.c.
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
273 This is set by update_begin and looked at by all the XT functions.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
274 It is zero while not inside an update. In that case, the XT
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
275 functions assume that `selected_frame' is the frame to apply to. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
276
2468
35aa32e1a003 * xterm.c (updating_frame): Declare this extern instead of static,
Jim Blandy <jimb@redhat.com>
parents: 2439
diff changeset
277 extern struct frame *updating_frame;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
278
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
279 extern int waiting_for_input;
15507
3fe1a322fbf5 (x_connection_closed): If waiting_for_input, call quit_throw_to_read_char.
Richard M. Stallman <rms@gnu.org>
parents: 15472
diff changeset
280
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
281 /* This is a frame waiting to be auto-raised, within XTread_socket. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
282
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
283 struct frame *pending_autoraise_frame;
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
284
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
285 #ifdef USE_X_TOOLKIT
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
286 /* The application context for Xt use. */
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
287 XtAppContext Xt_app_con;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
288 static String Xt_default_resources[] = {0};
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
289 #endif /* USE_X_TOOLKIT */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
290
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
291 /* Nominal cursor position -- where to draw output.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
292 HPOS and VPOS are window relative glyph matrix coordinates.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
293 X and Y are window relative pixel coordinates. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
294
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
295 struct cursor_pos output_cursor;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
296
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
297 /* Non-zero means user is interacting with a toolkit scroll bar. */
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
298
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
299 static int toolkit_scroll_bar_interaction;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
300
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
301 /* Mouse movement.
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
302
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
303 Formerly, we used PointerMotionHintMask (in standard_event_mask)
15042
c99dd01d9334 (note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 14963
diff changeset
304 so that we would have to call XQueryPointer after each MotionNotify
c99dd01d9334 (note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 14963
diff changeset
305 event to ask for another such event. However, this made mouse tracking
c99dd01d9334 (note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 14963
diff changeset
306 slow, and there was a bug that made it eventually stop.
c99dd01d9334 (note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 14963
diff changeset
307
c99dd01d9334 (note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 14963
diff changeset
308 Simply asking for MotionNotify all the time seems to work better.
c99dd01d9334 (note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 14963
diff changeset
309
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
310 In order to avoid asking for motion events and then throwing most
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
311 of them away or busy-polling the server for mouse positions, we ask
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
312 the server for pointer motion hints. This means that we get only
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
313 one event per group of mouse movements. "Groups" are delimited by
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
314 other kinds of events (focus changes and button clicks, for
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
315 example), or by XQueryPointer calls; when one of these happens, we
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
316 get another MotionNotify event the next time the mouse moves. This
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
317 is at least as efficient as getting motion events when mouse
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
318 tracking is on, and I suspect only negligibly worse when tracking
15042
c99dd01d9334 (note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 14963
diff changeset
319 is off. */
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
320
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
321 /* Where the mouse was last time we reported a mouse event. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
322
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
323 FRAME_PTR last_mouse_frame;
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
324 static XRectangle last_mouse_glyph;
15803
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
325 static Lisp_Object last_mouse_press_frame;
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
326
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
327 /* The scroll bar in which the last X motion event occurred.
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
328
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
329 If the last X motion event occurred in a scroll bar, we set this so
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
330 XTmouse_position can know whether to report a scroll bar motion or
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
331 an ordinary motion.
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
332
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
333 If the last X motion event didn't occur in a scroll bar, we set
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
334 this to Qnil, to tell XTmouse_position to return an ordinary motion
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
335 event. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
336
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
337 static Lisp_Object last_mouse_scroll_bar;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
338
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
339 /* This is a hack. We would really prefer that XTmouse_position would
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
340 return the time associated with the position it returns, but there
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
341 doesn't seem to be any way to wrest the time-stamp from the server
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
342 along with the position query. So, we just keep track of the time
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
343 of the last movement we received, and return that in hopes that
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
344 it's somewhat accurate. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
345
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
346 static Time last_mouse_movement_time;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
347
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
348 /* Incremented by XTread_socket whenever it really tries to read
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
349 events. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
350
9337
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
351 #ifdef __STDC__
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
352 static int volatile input_signal_count;
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
353 #else
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
354 static int input_signal_count;
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
355 #endif
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
356
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
357 /* Used locally within XTread_socket. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
358
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
359 static int x_noop_count;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
360
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
361 /* Initial values of argv and argc. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
362
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
363 extern char **initial_argv;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
364 extern int initial_argc;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
365
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
366 extern Lisp_Object Vcommand_line_args, Vsystem_name;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
367
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
368 /* Tells if a window manager is present or not. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
369
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
370 extern Lisp_Object Vx_no_window_manager;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
371
6941
a914781ef58a (Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents: 6934
diff changeset
372 extern Lisp_Object Qface, Qmouse_face;
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
373
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
374 extern int errno;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
375
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
376 /* A mask of extra modifier bits to put into every keyboard char. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
377
1841
338e4ffdb54b (XTread_socket): Support extra_keyboard_modifiers.
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
378 extern int extra_keyboard_modifiers;
338e4ffdb54b (XTread_socket): Support extra_keyboard_modifiers.
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
379
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
380 static Lisp_Object Qvendor_specific_keysyms;
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
381
30321
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
382 extern XrmDatabase x_load_resources P_ ((Display *, char *, char *, char *));
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
383 extern Lisp_Object x_icon_type P_ ((struct frame *));
11915
e2ab839155e1 (XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents: 11904
diff changeset
384
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
385
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
386 /* Enumeration for overriding/changing the face to use for drawing
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
387 glyphs in x_draw_glyphs. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
388
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
389 enum draw_glyphs_face
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
390 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
391 DRAW_NORMAL_TEXT,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
392 DRAW_INVERSE_VIDEO,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
393 DRAW_CURSOR,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
394 DRAW_MOUSE_FACE,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
395 DRAW_IMAGE_RAISED,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
396 DRAW_IMAGE_SUNKEN
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
397 };
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
398
35487
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
399 static void x_set_window_size_1 P_ ((struct frame *, int, int, int));
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
400 static const XColor *x_color_cells P_ ((struct frame *, int *));
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
401 static void x_update_window_end P_ ((struct window *, int, int));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
402 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
403 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
404 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
405 unsigned));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
406 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
407 int *, int *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
408 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
409 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
410 int *, int *, int *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
411 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
412 static void note_mouse_highlight P_ ((struct frame *, int, int));
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
413 static void note_tool_bar_highlight P_ ((struct frame *f, int, int));
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
414 static void x_handle_tool_bar_click P_ ((struct frame *, XButtonEvent *));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
415 static void show_mouse_face P_ ((struct x_display_info *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
416 enum draw_glyphs_face));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
417 static int x_io_error_quitter P_ ((Display *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
418 int x_catch_errors P_ ((Display *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
419 void x_uncatch_errors P_ ((Display *, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
420 void x_lower_frame P_ ((struct frame *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
421 void x_scroll_bar_clear P_ ((struct frame *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
422 int x_had_errors_p P_ ((Display *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
423 void x_wm_set_size_hint P_ ((struct frame *, long, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
424 void x_raise_frame P_ ((struct frame *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
425 void x_set_window_size P_ ((struct frame *, int, int, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
426 void x_wm_set_window_state P_ ((struct frame *, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
427 void x_wm_set_icon_pixmap P_ ((struct frame *, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
428 void x_initialize P_ ((void));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
429 static void x_font_min_bounds P_ ((XFontStruct *, int *, int *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
430 static int x_compute_min_glyph_bounds P_ ((struct frame *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
431 static void x_draw_phys_cursor_glyph P_ ((struct window *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
432 struct glyph_row *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
433 enum draw_glyphs_face));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
434 static void x_update_end P_ ((struct frame *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
435 static void XTframe_up_to_date P_ ((struct frame *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
436 static void XTreassert_line_highlight P_ ((int, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
437 static void x_change_line_highlight P_ ((int, int, int, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
438 static void XTset_terminal_modes P_ ((void));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
439 static void XTreset_terminal_modes P_ ((void));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
440 static void XTcursor_to P_ ((int, int, int, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
441 static void x_write_glyphs P_ ((struct glyph *, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
442 static void x_clear_end_of_line P_ ((int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
443 static void x_clear_frame P_ ((void));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
444 static void x_clear_cursor P_ ((struct window *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
445 static void frame_highlight P_ ((struct frame *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
446 static void frame_unhighlight P_ ((struct frame *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
447 static void x_new_focus_frame P_ ((struct x_display_info *, struct frame *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
448 static void XTframe_rehighlight P_ ((struct frame *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
449 static void x_frame_rehighlight P_ ((struct x_display_info *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
450 static void x_draw_hollow_cursor P_ ((struct window *, struct glyph_row *));
28321
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
451 static void x_draw_bar_cursor P_ ((struct window *, struct glyph_row *, int));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
452 static int x_intersect_rectangles P_ ((XRectangle *, XRectangle *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
453 XRectangle *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
454 static void expose_frame P_ ((struct frame *, int, int, int, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
455 static void expose_window_tree P_ ((struct window *, XRectangle *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
456 static void expose_window P_ ((struct window *, XRectangle *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
457 static void expose_area P_ ((struct window *, struct glyph_row *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
458 XRectangle *, enum glyph_row_area));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
459 static void expose_line P_ ((struct window *, struct glyph_row *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
460 XRectangle *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
461 static void x_update_cursor_in_window_tree P_ ((struct window *, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
462 static void x_update_window_cursor P_ ((struct window *, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
463 static void x_erase_phys_cursor P_ ((struct window *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
464 void x_display_and_set_cursor P_ ((struct window *, int, int, int, int, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
465 static void x_draw_bitmap P_ ((struct window *, struct glyph_row *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
466 enum bitmap_type));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
467
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
468 static void x_clip_to_row P_ ((struct window *, struct glyph_row *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
469 GC, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
470 static int x_phys_cursor_in_rect_p P_ ((struct window *, XRectangle *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
471 static void x_draw_row_bitmaps P_ ((struct window *, struct glyph_row *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
472 static void note_overwritten_text_cursor P_ ((struct window *, int, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
473 static void x_flush P_ ((struct frame *f));
30321
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
474 static void x_update_begin P_ ((struct frame *));
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
475 static void x_update_window_begin P_ ((struct window *));
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
476 static void x_draw_vertical_border P_ ((struct window *));
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
477 static void x_after_update_window_line P_ ((struct glyph_row *));
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
478 static INLINE void take_vertical_position_into_account P_ ((struct it *));
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
479 static void x_produce_stretch_glyph P_ ((struct it *));
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
480
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
481
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
482 /* 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
483
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
484 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
485 x_flush (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
486 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
487 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
488 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
489 if (f == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
490 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
491 Lisp_Object rest, frame;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
492 FOR_EACH_FRAME (rest, frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
493 x_flush (XFRAME (frame));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
494 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
495 else if (FRAME_X_P (f))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
496 XFlush (FRAME_X_DISPLAY (f));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
497 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
498 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
499
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
500
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
501 /* 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
502 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
503 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
504 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
505 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
506 performance. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
507
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
508 #define XFlush(DISPLAY) (void) 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
509
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
510
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
511 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
512 Debugging
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
513 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
514
12192
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
515 #if 0
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
516
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
517 /* 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
518 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
519
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
520 struct record
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
521 {
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
522 char *locus;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
523 int type;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
524 };
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
525
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
526 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
527
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
528 int event_record_index;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
529
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
530 record_event (locus, type)
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
531 char *locus;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
532 int type;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
533 {
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
534 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
535 event_record_index = 0;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
536
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
537 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
538 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
539 event_record_index++;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
540 }
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
541
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
542 #endif /* 0 */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
543
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
544
12192
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
545
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
546 /* 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
547
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
548 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
549 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
550 Display *dpy;
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
551 {
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
552 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
553
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
554 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
555 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
556 return dpyinfo;
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
557
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
558 return 0;
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
559 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
560
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
561
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
562
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
563 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
564 Starting and ending an update
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 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
568 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
569 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
570 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
571 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
572
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
573 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
574 x_update_begin (f)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
575 struct frame *f;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
576 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
577 /* Nothing to do. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
578 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
579
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
580
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
581 /* 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
582 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
583 position of W. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
584
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
585 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
586 x_update_window_begin (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
587 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
588 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
589 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
590 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
591
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
592 updated_window = w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
593 set_output_cursor (&w->cursor);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
594
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
595 BLOCK_INPUT;
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
596
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
597 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
598 {
6660
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
599 /* 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
600 display_info->mouse_face_defer = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
601
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
602 /* 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
603 highlighting. */
10274
83aaf59dabbe (XTupdate_begin): Fix backward test in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 10223
diff changeset
604 if (FRAME_GARBAGED_P (f))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
605 display_info->mouse_face_window = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
606
30153
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
607 #if 0 /* Rows in a current matrix containing glyphs in mouse-face have
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
608 their mouse_face_p flag set, which means that they are always
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
609 unequal to rows in a desired matrix which never have that
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
610 flag set. So, rows containing mouse-face glyphs are never
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
611 scrolled, and we don't have to switch the mouse highlight off
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
612 here to prevent it from being scrolled. */
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
613
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
614 /* 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
615 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
616 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
617 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
618 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
619 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
620 && 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
621 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
622 int i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
623
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
624 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
625 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
626 break;
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
627
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
628 if (i < w->desired_matrix->nrows)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
629 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
630 }
30153
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
631 #endif /* 0 */
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
632 }
8781
98741404d3e0 Delete X11 conditionals.
Richard M. Stallman <rms@gnu.org>
parents: 8724
diff changeset
633
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
634 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
635 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
636
24991
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 /* 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
639 have vertical scroll bars. */
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 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
642 x_draw_vertical_border (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
643 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
644 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
645 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
646
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
647 /* 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
648 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
649 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
650 neighbor will suffice as a border. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
651 if (!WINDOW_RIGHTMOST_P (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
652 && !FRAME_HAS_VERTICAL_SCROLL_BARS (f))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
653 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
654 int x0, x1, y0, y1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
655
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
656 window_box_edges (w, -1, &x0, &y0, &x1, &y1);
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
657 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
658 y1 -= 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
659
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
660 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
661 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
662 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
663 }
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
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
666 /* End update of window W (which is equal to updated_window).
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
667
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
668 Draw vertical borders between horizontally adjacent windows, and
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
669 display W's cursor if CURSOR_ON_P is non-zero.
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
670
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
671 MOUSE_FACE_OVERWRITTEN_P non-zero means that some row containing
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
672 glyphs in mouse-face were overwritten. In that case we have to
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
673 make sure that the mouse-highlight is properly redrawn.
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
674
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
675 W may be a menu bar pseudo-window in case we don't have X toolkit
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
676 support. Such windows don't have a cursor, so don't display it
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
677 here. */
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
678
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
679 static void
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
680 x_update_window_end (w, cursor_on_p, mouse_face_overwritten_p)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
681 struct window *w;
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
682 int cursor_on_p, mouse_face_overwritten_p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
683 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
684 if (!w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
685 {
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
686 struct x_display_info *dpyinfo
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
687 = FRAME_X_DISPLAY_INFO (XFRAME (w->frame));
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
688
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
689 BLOCK_INPUT;
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
690
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
691 /* If a row with mouse-face was overwritten, arrange for
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
692 XTframe_up_to_date to redisplay the mouse highlight. */
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
693 if (mouse_face_overwritten_p)
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
694 {
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
695 dpyinfo->mouse_face_beg_row = dpyinfo->mouse_face_beg_col = -1;
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
696 dpyinfo->mouse_face_end_row = dpyinfo->mouse_face_end_col = -1;
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
697 dpyinfo->mouse_face_window = Qnil;
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
698 }
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
699
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
700 if (cursor_on_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
701 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
702 output_cursor.vpos,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
703 output_cursor.x, output_cursor.y);
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
704
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
705 x_draw_vertical_border (w);
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 updated_window = NULL;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
713 /* 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
714 update_end. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
715
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
716 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
717 x_update_end (f)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
718 struct frame *f;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
719 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
720 /* Mouse highlight may be displayed again. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
721 FRAME_X_DISPLAY_INFO (f)->mouse_face_defer = 0;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
722
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
723 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
724 XFlush (FRAME_X_DISPLAY (f));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
725 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
726 }
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
727
24991
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 /* 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
730 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
731 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
732
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
733 static void
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
734 XTframe_up_to_date (f)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
735 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
736 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
737 if (FRAME_X_P (f))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
738 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
739 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
740
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
741 if (dpyinfo->mouse_face_deferred_gc
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
742 || f == dpyinfo->mouse_face_mouse_frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
743 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
744 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
745 if (dpyinfo->mouse_face_mouse_frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
746 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
747 dpyinfo->mouse_face_mouse_x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
748 dpyinfo->mouse_face_mouse_y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
749 dpyinfo->mouse_face_deferred_gc = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
750 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
751 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
752 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
753 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
754
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
755
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
756 /* 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
757 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
758 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
759 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
760 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
761 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
762
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
763 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
764 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
765 struct glyph_row *desired_row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
766 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
767 struct window *w = updated_window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
768
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
769 xassert (w);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
770
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
771 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
772 {
35581
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
773 struct frame *f;
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
774 int width;
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
775
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
776 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
777 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
778
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
779 /* 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
780 full-width rows stays visible in the internal border. */
35581
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
781 if (windows_or_buffers_changed
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
782 && (f = XFRAME (w->frame),
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
783 width = FRAME_INTERNAL_BORDER_WIDTH (f),
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
784 width != 0))
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
785 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
786 int height = desired_row->visible_height;
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
787 int x = (window_box_right (w, -1)
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
788 + 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
789 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
790
35581
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
791 x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
792 x, y, width, height, False);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
793 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
794
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
795 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
796 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
797 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
798
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
799
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
800 /* 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
801 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
802 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
803 drawn. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
804
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
805 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
806 x_draw_bitmap (w, row, which)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
807 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
808 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
809 enum bitmap_type which;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
810 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
811 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
812 Display *display = FRAME_X_DISPLAY (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
813 Window window = FRAME_X_WINDOW (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
814 int x, y, wd, h, dy;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
815 unsigned char *bits;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
816 Pixmap pixmap;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
817 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
818 struct face *face;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
819 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
820
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
821 /* 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
822 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
823
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
824 switch (which)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
825 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
826 case LEFT_TRUNCATION_BITMAP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
827 wd = left_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
828 h = left_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
829 bits = left_bits;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
830 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
831 - wd
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
832 - (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
833 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
834
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
835 case OVERLAY_ARROW_BITMAP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
836 wd = left_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
837 h = left_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
838 bits = ov_bits;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
839 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
840 - wd
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
841 - (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
842 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
843
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
844 case RIGHT_TRUNCATION_BITMAP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
845 wd = right_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
846 h = right_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
847 bits = right_bits;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
848 x = window_box_right (w, -1);
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
849 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
850 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
851
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
852 case CONTINUED_LINE_BITMAP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
853 wd = right_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
854 h = right_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
855 bits = continued_bits;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
856 x = window_box_right (w, -1);
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
857 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
858 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
859
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
860 case CONTINUATION_LINE_BITMAP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
861 wd = continuation_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
862 h = continuation_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
863 bits = continuation_bits;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
864 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
865 - wd
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
866 - (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
867 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
868
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
869 case ZV_LINE_BITMAP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
870 wd = zv_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
871 h = zv_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
872 bits = zv_bits;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
873 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
874 - wd
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
875 - (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
876 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
877
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
878 default:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
879 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
880 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
881
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
882 /* 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
883 start drawing the bitmap. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
884 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
885 dy = (row->height - h) / 2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
886
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
887 /* 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
888 by the server. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
889 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
890 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
891 face->foreground,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
892 face->background, depth);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
893 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
894 XFreePixmap (display, pixmap);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
895 XSetClipMask (display, gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
896 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
897
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
898
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
899 /* 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
900 function with input blocked. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
901
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
902 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
903 x_draw_row_bitmaps (w, row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
904 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
905 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
906 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
907 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
908 enum bitmap_type bitmap;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
909 struct face *face;
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
910 int header_line_height = -1;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
911
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
912 xassert (interrupt_input_blocked);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
913
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
914 /* 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
915 don't have to draw anything. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
916 if (row->visible_height <= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
917 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
918
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
919 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
920 PREPARE_FACE_FOR_DISPLAY (f, face);
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 /* 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
923 if (row->overlay_arrow_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
924 bitmap = OVERLAY_ARROW_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
925 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
926 bitmap = LEFT_TRUNCATION_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
927 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
928 bitmap = CONTINUATION_LINE_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
929 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
930 bitmap = ZV_LINE_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
931 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
932 bitmap = NO_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
933
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
934 /* 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
935 the flags area. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
936 if (bitmap == NO_BITMAP
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
937 || 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
938 || 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
939 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
940 /* 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
941 int border = ((XFASTINT (w->left) > 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
942 && !FRAME_HAS_VERTICAL_SCROLL_BARS (f))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
943 ? 1 : 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
944 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
945
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
946 if (header_line_height < 0)
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
947 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
948
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
949 /* 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
950 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
951 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
952 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
953 if (face->stipple)
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
954 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
955 else
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
956 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
957
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
958 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
959 face->gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
960 (left
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
961 - 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
962 + border),
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
963 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
964 row->y)),
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
965 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
966 row->visible_height);
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
967 if (!face->stipple)
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
968 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
969 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
970
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
971 /* Draw the left bitmap. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
972 if (bitmap != NO_BITMAP)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
973 x_draw_bitmap (w, row, bitmap);
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 /* 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
976 if (row->truncated_on_right_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
977 bitmap = RIGHT_TRUNCATION_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
978 else if (row->continued_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
979 bitmap = CONTINUED_LINE_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
980 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
981 bitmap = NO_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
982
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
983 /* 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
984 the flags area. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
985 if (bitmap == NO_BITMAP
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
986 || 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
987 || 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
988 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
989 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
990
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
991 if (header_line_height < 0)
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
992 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
993
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
994 /* 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
995 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
996 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
997 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
998 if (face->stipple)
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
999 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
1000 else
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
1001 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
1002 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
1003 face->gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1004 right,
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
1005 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
1006 row->y)),
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
1007 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
1008 row->visible_height);
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
1009 if (!face->stipple)
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
1010 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
1011 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1012
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1013 /* Draw the right bitmap. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1014 if (bitmap != NO_BITMAP)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1015 x_draw_bitmap (w, row, bitmap);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1016 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1017
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1018
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1019 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1020 Line Highlighting
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1023 /* 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
1024 frames. Aborts when called. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1025
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1026 static void
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1027 XTreassert_line_highlight (new, vpos)
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1028 int new, vpos;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1029 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1030 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1031 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1032
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 /* 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
1035 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
1036 called. */
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 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1039 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
1040 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
1041 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1042 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1043 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1044
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 /* 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
1047 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
1048 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
1049 rarely happens). */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1050
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
1051 static void
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1052 XTset_terminal_modes ()
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1053 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1054 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1055
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1056 /* 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
1057 the X-windows go away, and suspending requires no action. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1058
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
1059 static void
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1060 XTreset_terminal_modes ()
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1061 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1062 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1063
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1064
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1065
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1066 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1067 Output Cursor
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1068 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1069
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1070 /* Set the 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
1071 positions are relative to updated_window. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1072
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1073 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1074 set_output_cursor (cursor)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1075 struct cursor_pos *cursor;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1076 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1077 output_cursor.hpos = cursor->hpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1078 output_cursor.vpos = cursor->vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1079 output_cursor.x = cursor->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1080 output_cursor.y = cursor->y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1081 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1084 /* Set a nominal cursor position.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1085
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1086 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
1087 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
1088
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1089 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
1090 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
1091 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
1092 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
1093
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1094 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1095 XTcursor_to (vpos, hpos, y, x)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1096 int vpos, hpos, y, x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1097 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1098 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1099
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1100 /* 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
1101 if (updated_window)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1102 w = updated_window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1103 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1104 w = XWINDOW (selected_window);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1105
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1106 /* Set the output cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1107 output_cursor.hpos = hpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1108 output_cursor.vpos = vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1109 output_cursor.x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1110 output_cursor.y = y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1111
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1112 /* 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
1113 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
1114 if (updated_window == NULL)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1115 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1116 BLOCK_INPUT;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1117 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
1118 XFlush (FRAME_X_DISPLAY (SELECTED_FRAME ()));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1119 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1120 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1121 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1122
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1123
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1124
24991
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 Display Iterator
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1129 /* Function prototypes of this page. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1130
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1131 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
1132 struct glyph *,
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1133 XChar2b *,
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1134 int *));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1135 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
1136 int, XChar2b *, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1137 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
1138 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
1139 static void x_append_glyph P_ ((struct it *));
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1140 static void x_append_composite_glyph P_ ((struct it *));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1141 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
1142 int, int, double));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1143 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
1144 static void x_produce_image_glyph P_ ((struct it *it));
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1145
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1146
27974
d443ad369a18 (PER_CHAR_METRIC): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27967
diff changeset
1147 /* Get metrics of character CHAR2B in FONT. Value is null if CHAR2B
d443ad369a18 (PER_CHAR_METRIC): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27967
diff changeset
1148 is not contained in the font. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1149
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1150 static INLINE XCharStruct *
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1151 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
1152 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1153 XChar2b *char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1154 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1155 /* The result metric information. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1156 XCharStruct *pcm = NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1157
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1158 xassert (font && char2b);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1159
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1160 if (font->per_char != NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1161 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1162 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
1163 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1164 /* 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
1165 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
1166 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
1167 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
1168 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
1169 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
1170 if (char2b->byte1 == 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1171 && char2b->byte2 >= font->min_char_or_byte2
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1172 && 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->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
1174 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1175 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1176 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1177 /* If 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
1178 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
1179 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
1180 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
1181
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1182 byte1 = N/D + min_byte1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1183 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
1184
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1185 where:
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 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
1188 / = integer division
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1189 \ = integer modulus */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1190 if (char2b->byte1 >= font->min_byte1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1191 && char2b->byte1 <= font->max_byte1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1192 && 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
1193 && 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
1194 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1195 pcm = (font->per_char
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1196 + ((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
1197 * (char2b->byte1 - font->min_byte1))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1198 + (char2b->byte2 - font->min_char_or_byte2));
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 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1202 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1203 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1204 /* 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
1205 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
1206 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
1207 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
1208 && 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
1209 pcm = &font->max_bounds;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1210 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1211
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1212 return ((pcm == NULL
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1213 || (pcm->width == 0 && (pcm->rbearing - pcm->lbearing) == 0))
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1214 ? NULL : pcm);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1215 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1216
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1217
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1218 /* 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
1219 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
1220
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1221 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1222 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
1223 int c;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1224 XChar2b *char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1225 struct font_info *font_info;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1226 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1227 int charset = CHAR_CHARSET (c);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1228 XFontStruct *font = font_info->font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1229
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1230 /* 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
1231 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
1232 fixed encoding. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1233 if (font_info->font_encoder)
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 /* It's a program. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1236 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
1237
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1238 if (CHARSET_DIMENSION (charset) == 1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1239 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1240 ccl->reg[0] = charset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1241 ccl->reg[1] = char2b->byte2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1242 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1243 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1244 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1245 ccl->reg[0] = charset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1246 ccl->reg[1] = char2b->byte1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1247 ccl->reg[2] = char2b->byte2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1248 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1249
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1250 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
1251
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1252 /* 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
1253 program. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1254 if (font->max_byte1 == 0) /* 1-byte font */
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1255 char2b->byte1 = 0, char2b->byte2 = ccl->reg[1];
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1256 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1257 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
1258 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1259 else if (font_info->encoding[charset])
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1260 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1261 /* 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
1262 encoding numbers. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1263 int enc = font_info->encoding[charset];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1264
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1265 if ((enc == 1 || enc == 2)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1266 && CHARSET_DIMENSION (charset) == 2)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1267 char2b->byte1 |= 0x80;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1268
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1269 if (enc == 1 || enc == 3)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1270 char2b->byte2 |= 0x80;
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 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1275 /* 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
1276 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
1277 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
1278 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
1279
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1280 static INLINE struct face *
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1281 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
1282 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1283 int c, face_id;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1284 XChar2b *char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1285 int multibyte_p;
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 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
1288
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1289 if (!multibyte_p)
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 /* 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
1292 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
1293 char2b->byte1 = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1294 char2b->byte2 = c;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1295 face_id = FACE_FOR_CHAR (f, face, c);
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1296 face = FACE_FROM_ID (f, face_id);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1297 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1298 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
1299 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1300 /* 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
1301 char2b->byte1 = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1302 char2b->byte2 = c;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1303 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1304 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1305 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1306 int c1, c2, charset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1307
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1308 /* 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
1309 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
1310 SPLIT_CHAR (c, charset, c1, c2);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1311 if (c2 > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1312 char2b->byte1 = c1, char2b->byte2 = c2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1313 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1314 char2b->byte1 = 0, char2b->byte2 = c1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1315
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1316 /* Maybe encode the character in *CHAR2B. */
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1317 if (face->font != NULL)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1318 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1319 struct font_info *font_info
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1320 = 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
1321 if (font_info)
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1322 x_encode_char (c, char2b, font_info);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1323 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1324 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1325
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1326 /* 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
1327 xassert (face != NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1328 PREPARE_FACE_FOR_DISPLAY (f, face);
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 return face;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1331 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1332
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1333
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1334 /* Get face and two-byte form of character glyph GLYPH on frame F.
27000
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
1335 The encoding of GLYPH->u.ch is returned in *CHAR2B. Value is
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1336 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
1337
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1338 static INLINE struct face *
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1339 x_get_glyph_face_and_encoding (f, glyph, char2b, two_byte_p)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1340 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1341 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1342 XChar2b *char2b;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1343 int *two_byte_p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1344 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1345 struct face *face;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1346
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1347 xassert (glyph->type == CHAR_GLYPH);
27000
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
1348 face = FACE_FROM_ID (f, glyph->face_id);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1349
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1350 if (two_byte_p)
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1351 *two_byte_p = 0;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1352
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1353 if (!glyph->multibyte_p)
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 /* 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
1356 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
1357 char2b->byte1 = 0;
27000
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
1358 char2b->byte2 = glyph->u.ch;
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
1359 }
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
1360 else if (glyph->u.ch < 128
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
1361 && glyph->face_id < BASIC_FACE_ID_SENTINEL)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1362 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1363 /* 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
1364 char2b->byte1 = 0;
27000
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
1365 char2b->byte2 = glyph->u.ch;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1366 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1367 else
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 int c1, c2, charset;
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 /* 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
1372 really a one-byte character so that byte1 is zero. */
27000
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
1373 SPLIT_CHAR (glyph->u.ch, charset, c1, c2);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1374 if (c2 > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1375 char2b->byte1 = c1, char2b->byte2 = c2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1376 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1377 char2b->byte1 = 0, char2b->byte2 = c1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1378
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1379 /* Maybe encode the character in *CHAR2B. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1380 if (charset != CHARSET_ASCII)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1381 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1382 struct font_info *font_info
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1383 = 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
1384 if (font_info)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1385 {
27000
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
1386 x_encode_char (glyph->u.ch, char2b, font_info);
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1387 if (two_byte_p)
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1388 *two_byte_p
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1389 = ((XFontStruct *) (font_info->font))->max_byte1 > 0;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1390 }
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 /* 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
1395 xassert (face != NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1396 PREPARE_FACE_FOR_DISPLAY (f, face);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1397 return face;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1398 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1399
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1400
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1401 /* 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
1402 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
1403
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1404 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1405 x_append_glyph (it)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1406 struct it *it;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1407 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1408 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1409 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
1410
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1411 xassert (it->glyph_row);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1412 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
1413
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1414 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
1415 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
1416 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1417 glyph->charpos = CHARPOS (it->position);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1418 glyph->object = it->object;
30042
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1419 glyph->pixel_width = it->pixel_width;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1420 glyph->voffset = it->voffset;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1421 glyph->type = CHAR_GLYPH;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1422 glyph->multibyte_p = it->multibyte_p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1423 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
1424 glyph->right_box_line_p = it->end_of_box_run_p;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1425 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
1426 || it->phys_descent > it->descent);
30042
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1427 glyph->padding_p = 0;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1428 glyph->glyph_not_available_p = it->glyph_not_available_p;
30042
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1429 glyph->face_id = it->face_id;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1430 glyph->u.ch = it->char_to_display;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1431 ++it->glyph_row->used[area];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1432 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1433 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1434
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1435 /* Store one glyph for the composition IT->cmp_id in IT->glyph_row.
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1436 Called from x_produce_glyphs when IT->glyph_row is non-null. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1437
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1438 static INLINE void
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1439 x_append_composite_glyph (it)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1440 struct it *it;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1441 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1442 struct glyph *glyph;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1443 enum glyph_row_area area = it->area;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1444
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1445 xassert (it->glyph_row);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1446
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1447 glyph = it->glyph_row->glyphs[area] + it->glyph_row->used[area];
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1448 if (glyph < it->glyph_row->glyphs[area + 1])
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1449 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1450 glyph->charpos = CHARPOS (it->position);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1451 glyph->object = it->object;
30042
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1452 glyph->pixel_width = it->pixel_width;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1453 glyph->voffset = it->voffset;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1454 glyph->type = COMPOSITE_GLYPH;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1455 glyph->multibyte_p = it->multibyte_p;
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1456 glyph->left_box_line_p = it->start_of_box_run_p;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1457 glyph->right_box_line_p = it->end_of_box_run_p;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1458 glyph->overlaps_vertically_p = (it->phys_ascent > it->ascent
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1459 || it->phys_descent > it->descent);
30042
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1460 glyph->padding_p = 0;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1461 glyph->glyph_not_available_p = 0;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1462 glyph->face_id = it->face_id;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1463 glyph->u.cmp_id = it->cmp_id;
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1464 ++it->glyph_row->used[area];
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1465 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1466 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1467
24991
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 /* 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
1470 IT->voffset. */
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 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1473 take_vertical_position_into_account (it)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1474 struct it *it;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1475 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1476 if (it->voffset)
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 if (it->voffset < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1479 /* 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
1480 in the line. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1481 it->ascent += abs (it->voffset);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1482 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1483 /* 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
1484 in the line. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1485 it->descent += it->voffset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1486 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1487 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1488
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 /* 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
1491 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
1492 an overview of struct display_iterator. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1493
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1494 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1495 x_produce_image_glyph (it)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1496 struct it *it;
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 struct image *img;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1499 struct face *face;
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 xassert (it->what == IT_IMAGE);
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 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
1504 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
1505 xassert (img);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1506
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1507 /* 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
1508 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
1509 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
1510
28785
796eafcfc070 (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 28686
diff changeset
1511 it->ascent = it->phys_ascent = image_ascent (img, face);
35276
008aea836cbc (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 35272
diff changeset
1512 it->descent = it->phys_descent = img->height + 2 * img->vmargin - it->ascent;
008aea836cbc (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 35272
diff changeset
1513 it->pixel_width = img->width + 2 * img->hmargin;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1514
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1515 it->nglyphs = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1516
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1517 if (face->box != FACE_NO_BOX)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1518 {
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1519 if (face->box_line_width > 0)
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1520 {
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1521 it->ascent += face->box_line_width;
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1522 it->descent += face->box_line_width;
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1523 }
24991
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 if (it->start_of_box_run_p)
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1526 it->pixel_width += abs (face->box_line_width);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1527 if (it->end_of_box_run_p)
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1528 it->pixel_width += abs (face->box_line_width);
24991
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1531 take_vertical_position_into_account (it);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1532
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1533 if (it->glyph_row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1534 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1535 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1536 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
1537
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1538 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
1539 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
1540 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1541 glyph->charpos = CHARPOS (it->position);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1542 glyph->object = it->object;
30042
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1543 glyph->pixel_width = it->pixel_width;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1544 glyph->voffset = it->voffset;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1545 glyph->type = IMAGE_GLYPH;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1546 glyph->multibyte_p = it->multibyte_p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1547 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
1548 glyph->right_box_line_p = it->end_of_box_run_p;
30042
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1549 glyph->overlaps_vertically_p = 0;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1550 glyph->padding_p = 0;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1551 glyph->glyph_not_available_p = 0;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1552 glyph->face_id = it->face_id;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1553 glyph->u.img_id = img->id;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1554 ++it->glyph_row->used[area];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1555 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1556 }
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 /* 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
1561 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
1562 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
1563 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
1564
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1565 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1566 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
1567 struct it *it;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1568 Lisp_Object object;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1569 int width, height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1570 double ascent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1571 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1572 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1573 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
1574
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1575 xassert (ascent >= 0 && ascent <= 1);
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 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
1578 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
1579 {
30042
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1580 glyph->charpos = CHARPOS (it->position);
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1581 glyph->object = object;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1582 glyph->pixel_width = width;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1583 glyph->voffset = it->voffset;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1584 glyph->type = STRETCH_GLYPH;
30042
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1585 glyph->multibyte_p = it->multibyte_p;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1586 glyph->left_box_line_p = it->start_of_box_run_p;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1587 glyph->right_box_line_p = it->end_of_box_run_p;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1588 glyph->overlaps_vertically_p = 0;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1589 glyph->padding_p = 0;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1590 glyph->glyph_not_available_p = 0;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1591 glyph->face_id = it->face_id;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1592 glyph->u.stretch.ascent = height * ascent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1593 glyph->u.stretch.height = height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1594 ++it->glyph_row->used[area];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1595 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1599 /* 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
1600 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
1601 `(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
1602 being recognized:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1603
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1604 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
1605 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
1606 point number.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1607
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1608 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
1609 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
1610 `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
1611
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1612 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
1613 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
1614
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1615 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
1616
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1617 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
1618 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
1619
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1620 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
1621 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
1622 the glyph property.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1623
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1624 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
1625
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1626 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
1627 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
1628 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
1629
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1630 #define NUMVAL(X) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1631 ((INTEGERP (X) || FLOATP (X)) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1632 ? XFLOATINT (X) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1633 : - 1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1634
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1635
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1636 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1637 x_produce_stretch_glyph (it)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1638 struct it *it;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1639 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1640 /* (space :width WIDTH :height HEIGHT. */
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1641 #if GLYPH_DEBUG
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1642 extern Lisp_Object Qspace;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1643 #endif
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1644 extern Lisp_Object QCwidth, QCheight, QCascent;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1645 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
1646 extern Lisp_Object QCalign_to;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1647 Lisp_Object prop, plist;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1648 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
1649 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
1650 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
1651
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1652 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
1653
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1654 /* List should start with `space'. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1655 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
1656 plist = XCDR (it->object);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1657
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1658 /* Compute the width of the stretch. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1659 if (prop = Fplist_get (plist, QCwidth),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1660 NUMVAL (prop) > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1661 /* 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
1662 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
1663 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
1664 NUMVAL (prop) > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1665 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1666 /* 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
1667 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
1668 property. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1669 struct it it2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1670 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
1671
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1672 it2 = *it;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1673 if (it->multibyte_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1674 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1675 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
1676 - IT_BYTEPOS (*it));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1677 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
1678 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1679 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1680 it2.c = *p, it2.len = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1681
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1682 it2.glyph_row = NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1683 it2.what = IT_CHARACTER;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1684 x_produce_glyphs (&it2);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1685 width = NUMVAL (prop) * it2.pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1686 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1687 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
1688 NUMVAL (prop) > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1689 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
1690 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1691 /* 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
1692 width = CANON_X_UNIT (it->f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1693
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1694 /* Compute height. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1695 if (prop = Fplist_get (plist, QCheight),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1696 NUMVAL (prop) > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1697 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
1698 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
1699 NUMVAL (prop) > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1700 height = FONT_HEIGHT (font) * NUMVAL (prop);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1701 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1702 height = FONT_HEIGHT (font);
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 /* 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
1705 `: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
1706 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
1707 if (prop = Fplist_get (plist, QCascent),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1708 NUMVAL (prop) > 0 && NUMVAL (prop) <= 100)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1709 ascent = NUMVAL (prop) / 100.0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1710 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1711 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
1712
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1713 if (width <= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1714 width = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1715 if (height <= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1716 height = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1717
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1718 if (it->glyph_row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1719 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1720 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
1721 if (!STRINGP (object))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1722 object = it->w->buffer;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1723 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
1724 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1725
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1726 it->pixel_width = width;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1727 it->ascent = it->phys_ascent = height * ascent;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1728 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
1729 it->nglyphs = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1730
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1731 if (face->box != FACE_NO_BOX)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1732 {
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1733 if (face->box_line_width > 0)
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1734 {
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1735 it->ascent += face->box_line_width;
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1736 it->descent += face->box_line_width;
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1737 }
24991
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 if (it->start_of_box_run_p)
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1740 it->pixel_width += abs (face->box_line_width);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1741 if (it->end_of_box_run_p)
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1742 it->pixel_width += abs (face->box_line_width);
24991
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1745 take_vertical_position_into_account (it);
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
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1748 /* Return proper value to be used as baseline offset of font that has
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1749 ASCENT and DESCENT to draw characters by the font at the vertical
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1750 center of the line of frame F.
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1751
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1752 Here, out task is to find the value of BOFF in the following figure;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1753
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1754 -------------------------+-----------+-
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1755 -+-+---------+-+ | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1756 | | | | | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1757 | | | | F_ASCENT F_HEIGHT
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1758 | | | ASCENT | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1759 HEIGHT | | | | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1760 | | |-|-+------+-----------|------- baseline
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1761 | | | | BOFF | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1762 | |---------|-+-+ | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1763 | | | DESCENT | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1764 -+-+---------+-+ F_DESCENT |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1765 -------------------------+-----------+-
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1766
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1767 -BOFF + DESCENT + (F_HEIGHT - HEIGHT) / 2 = F_DESCENT
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1768 BOFF = DESCENT + (F_HEIGHT - HEIGHT) / 2 - F_DESCENT
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1769 DESCENT = FONT->descent
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1770 HEIGHT = FONT_HEIGHT (FONT)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1771 F_DESCENT = (F->output_data.x->font->descent
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1772 - F->output_data.x->baseline_offset)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1773 F_HEIGHT = FRAME_LINE_HEIGHT (F)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1774 */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1775
33289
834a6b4f08a4 (VCENTER_BASELINE_OFFSET): Fix previous change. If the
Kenichi Handa <handa@m17n.org>
parents: 33064
diff changeset
1776 #define VCENTER_BASELINE_OFFSET(FONT, F) \
834a6b4f08a4 (VCENTER_BASELINE_OFFSET): Fix previous change. If the
Kenichi Handa <handa@m17n.org>
parents: 33064
diff changeset
1777 ((FONT)->descent \
834a6b4f08a4 (VCENTER_BASELINE_OFFSET): Fix previous change. If the
Kenichi Handa <handa@m17n.org>
parents: 33064
diff changeset
1778 + (FRAME_LINE_HEIGHT ((F)) - FONT_HEIGHT ((FONT)) \
834a6b4f08a4 (VCENTER_BASELINE_OFFSET): Fix previous change. If the
Kenichi Handa <handa@m17n.org>
parents: 33064
diff changeset
1779 + (FRAME_LINE_HEIGHT ((F)) > FONT_HEIGHT ((FONT)))) / 2 \
834a6b4f08a4 (VCENTER_BASELINE_OFFSET): Fix previous change. If the
Kenichi Handa <handa@m17n.org>
parents: 33064
diff changeset
1780 - ((F)->output_data.x->font->descent - (F)->output_data.x->baseline_offset))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1781
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1782 /* Produce glyphs/get display metrics for the display element IT is
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1783 loaded with. See the description of struct display_iterator in
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1784 dispextern.h for an overview of struct display_iterator. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1785
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1786 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1787 x_produce_glyphs (it)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1788 struct it *it;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1789 {
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1790 it->glyph_not_available_p = 0;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1791
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1792 if (it->what == IT_CHARACTER)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1793 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1794 XChar2b char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1795 XFontStruct *font;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1796 struct face *face = FACE_FROM_ID (it->f, it->face_id);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1797 XCharStruct *pcm;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1798 int font_not_found_p;
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1799 struct font_info *font_info;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1800 int boff; /* baseline offset */
32401
be53a078f4e2 (x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents: 31948
diff changeset
1801 /* We may change it->multibyte_p upon unibyte<->multibyte
be53a078f4e2 (x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents: 31948
diff changeset
1802 conversion. So, save the current value now and restore it
be53a078f4e2 (x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents: 31948
diff changeset
1803 later.
be53a078f4e2 (x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents: 31948
diff changeset
1804
be53a078f4e2 (x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents: 31948
diff changeset
1805 Note: It seems that we don't have to record multibyte_p in
be53a078f4e2 (x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents: 31948
diff changeset
1806 struct glyph because the character code itself tells if or
be53a078f4e2 (x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents: 31948
diff changeset
1807 not the character is multibyte. Thus, in the future, we must
be53a078f4e2 (x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents: 31948
diff changeset
1808 consider eliminating the field `multibyte_p' in the struct
be53a078f4e2 (x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents: 31948
diff changeset
1809 glyph.
be53a078f4e2 (x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents: 31948
diff changeset
1810 */
be53a078f4e2 (x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents: 31948
diff changeset
1811 int saved_multibyte_p = it->multibyte_p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1812
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1813 /* Maybe translate single-byte characters to multibyte, or the
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1814 other way. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1815 it->char_to_display = it->c;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1816 if (!ASCII_BYTE_P (it->c))
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1817 {
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1818 if (unibyte_display_via_language_environment
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1819 && SINGLE_BYTE_CHAR_P (it->c)
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1820 && (it->c >= 0240
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1821 || !NILP (Vnonascii_translation_table)))
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1822 {
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1823 it->char_to_display = unibyte_char_to_multibyte (it->c);
32401
be53a078f4e2 (x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents: 31948
diff changeset
1824 it->multibyte_p = 1;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1825 it->face_id = FACE_FOR_CHAR (it->f, face, it->char_to_display);
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1826 face = FACE_FROM_ID (it->f, it->face_id);
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1827 }
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1828 else if (!SINGLE_BYTE_CHAR_P (it->c)
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1829 && !it->multibyte_p)
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1830 {
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1831 it->char_to_display = multibyte_char_to_unibyte (it->c, Qnil);
32401
be53a078f4e2 (x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents: 31948
diff changeset
1832 it->multibyte_p = 0;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1833 it->face_id = FACE_FOR_CHAR (it->f, face, it->char_to_display);
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1834 face = FACE_FROM_ID (it->f, it->face_id);
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1835 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1836 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1837
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1838 /* Get font to use. Encode IT->char_to_display. */
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1839 x_get_char_face_and_encoding (it->f, it->char_to_display,
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1840 it->face_id, &char2b,
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1841 it->multibyte_p);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1842 font = face->font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1843
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1844 /* When no suitable font found, use the default font. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1845 font_not_found_p = font == NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1846 if (font_not_found_p)
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1847 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1848 font = FRAME_FONT (it->f);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1849 boff = it->f->output_data.x->baseline_offset;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1850 font_info = NULL;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1851 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1852 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1853 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1854 font_info = FONT_INFO_FROM_ID (it->f, face->font_info_id);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1855 boff = font_info->baseline_offset;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1856 if (font_info->vertical_centering)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1857 boff = VCENTER_BASELINE_OFFSET (font, it->f) - boff;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1858 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1859
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1860 if (it->char_to_display >= ' '
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1861 && (!it->multibyte_p || it->char_to_display < 128))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1862 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1863 /* Either unibyte or ASCII. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1864 int stretched_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1865
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1866 it->nglyphs = 1;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1867
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1868 pcm = x_per_char_metric (font, &char2b);
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1869 it->ascent = font->ascent + boff;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1870 it->descent = font->descent - boff;
28443
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1871
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1872 if (pcm)
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1873 {
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1874 it->phys_ascent = pcm->ascent + boff;
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1875 it->phys_descent = pcm->descent - boff;
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1876 it->pixel_width = pcm->width;
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1877 }
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1878 else
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1879 {
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1880 it->glyph_not_available_p = 1;
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1881 it->phys_ascent = font->ascent + boff;
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1882 it->phys_descent = font->descent - boff;
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1883 it->pixel_width = FONT_WIDTH (font);
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1884 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1885
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1886 /* If this is a space inside a region of text with
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1887 `space-width' property, change its width. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1888 stretched_p = it->char_to_display == ' ' && !NILP (it->space_width);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1889 if (stretched_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1890 it->pixel_width *= XFLOATINT (it->space_width);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1891
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1892 /* If face has a box, add the box thickness to the character
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1893 height. If character has a box line to the left and/or
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1894 right, add the box line width to the character's width. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1895 if (face->box != FACE_NO_BOX)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1896 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1897 int thick = face->box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1898
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1899 if (thick > 0)
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1900 {
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1901 it->ascent += thick;
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1902 it->descent += thick;
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1903 }
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1904 else
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1905 thick = -thick;
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1906
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1907 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
1908 it->pixel_width += thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1909 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
1910 it->pixel_width += thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1911 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1912
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1913 /* 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
1914 (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
1915 if (face->overline_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1916 it->ascent += 2;
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 take_vertical_position_into_account (it);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1919
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1920 /* If 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
1921 if (it->glyph_row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1922 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1923 if (stretched_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1924 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1925 /* 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
1926 into a stretch glyph. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1927 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
1928 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
1929 it->ascent + it->descent, ascent);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1930 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1931 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1932 x_append_glyph (it);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1933
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1934 /* 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
1935 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
1936 glyph row. This is used to optimize X output code. */
28629
437e522505fb (x_produce_glyphs) <ASCII chars>: Take into account
Gerd Moellmann <gerd@gnu.org>
parents: 28443
diff changeset
1937 if (pcm && (pcm->lbearing < 0 || pcm->rbearing > pcm->width))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1938 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
1939 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1940 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1941 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
1942 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1943 /* 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
1944 it->pixel_width = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1945 it->nglyphs = 0;
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1946 it->ascent = it->phys_ascent = font->ascent + boff;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1947 it->descent = it->phys_descent = font->descent - boff;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1948
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1949 if (face->box != FACE_NO_BOX
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1950 && face->box_line_width > 0)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1951 {
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1952 it->ascent += face->box_line_width;
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1953 it->descent += face->box_line_width;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1954 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1955 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1956 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
1957 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1958 int tab_width = it->tab_width * CANON_X_UNIT (it->f);
28686
b02f0d91b5aa (x_produce_glyphs): Remove reference to struct it's
Gerd Moellmann <gerd@gnu.org>
parents: 28629
diff changeset
1959 int x = it->current_x + it->continuation_lines_width;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1960 int next_tab_x = ((1 + x + tab_width - 1) / tab_width) * tab_width;
31614
410df09028db (x_produce_glyphs): If the distance from the current
Gerd Moellmann <gerd@gnu.org>
parents: 31489
diff changeset
1961
410df09028db (x_produce_glyphs): If the distance from the current
Gerd Moellmann <gerd@gnu.org>
parents: 31489
diff changeset
1962 /* If the distance from the current position to the next tab
410df09028db (x_produce_glyphs): If the distance from the current
Gerd Moellmann <gerd@gnu.org>
parents: 31489
diff changeset
1963 stop is less than a canonical character width, use the
410df09028db (x_produce_glyphs): If the distance from the current
Gerd Moellmann <gerd@gnu.org>
parents: 31489
diff changeset
1964 tab stop after that. */
410df09028db (x_produce_glyphs): If the distance from the current
Gerd Moellmann <gerd@gnu.org>
parents: 31489
diff changeset
1965 if (next_tab_x - x < CANON_X_UNIT (it->f))
410df09028db (x_produce_glyphs): If the distance from the current
Gerd Moellmann <gerd@gnu.org>
parents: 31489
diff changeset
1966 next_tab_x += tab_width;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1967
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1968 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
1969 it->nglyphs = 1;
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1970 it->ascent = it->phys_ascent = font->ascent + boff;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1971 it->descent = it->phys_descent = font->descent - boff;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1972
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1973 if (it->glyph_row)
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 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
1976 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
1977 it->ascent + it->descent, ascent);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1978 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1979 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1980 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1981 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1982 /* 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
1983 character is the width of the character multiplied by the
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1984 width of the font. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1985
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1986 /* If we found a font, this font should give us the right
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1987 metrics. If we didn't find a font, use the frame's
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1988 default font and calculate the width of the character
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1989 from the charset width; this is what old redisplay code
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1990 did. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1991 pcm = x_per_char_metric (font, &char2b);
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1992 if (font_not_found_p || !pcm)
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1993 {
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1994 int charset = CHAR_CHARSET (it->char_to_display);
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1995
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1996 it->glyph_not_available_p = 1;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1997 it->pixel_width = (FONT_WIDTH (FRAME_FONT (it->f))
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1998 * CHARSET_WIDTH (charset));
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1999 it->phys_ascent = font->ascent + boff;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2000 it->phys_descent = font->descent - boff;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2001 }
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2002 else
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2003 {
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2004 it->pixel_width = pcm->width;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2005 it->phys_ascent = pcm->ascent + boff;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2006 it->phys_descent = pcm->descent - boff;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2007 if (it->glyph_row
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2008 && (pcm->lbearing < 0
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2009 || pcm->rbearing > pcm->width))
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2010 it->glyph_row->contains_overlapping_glyphs_p = 1;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2011 }
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2012 it->nglyphs = 1;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2013 it->ascent = font->ascent + boff;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2014 it->descent = font->descent - boff;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2015 if (face->box != FACE_NO_BOX)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2016 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2017 int thick = face->box_line_width;
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2018
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2019 if (thick > 0)
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2020 {
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2021 it->ascent += thick;
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2022 it->descent += thick;
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2023 }
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2024 else
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2025 thick = - thick;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2026
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2027 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
2028 it->pixel_width += thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2029 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
2030 it->pixel_width += thick;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2033 /* 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
2034 (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
2035 if (face->overline_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2036 it->ascent += 2;
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 take_vertical_position_into_account (it);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2039
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2040 if (it->glyph_row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2041 x_append_glyph (it);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2042 }
32401
be53a078f4e2 (x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents: 31948
diff changeset
2043 it->multibyte_p = saved_multibyte_p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2044 }
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2045 else if (it->what == IT_COMPOSITION)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2046 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2047 /* Note: A composition is represented as one glyph in the
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2048 glyph matrix. There are no padding glyphs. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2049 XChar2b char2b;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2050 XFontStruct *font;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2051 struct face *face = FACE_FROM_ID (it->f, it->face_id);
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2052 XCharStruct *pcm;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2053 int font_not_found_p;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2054 struct font_info *font_info;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2055 int boff; /* baseline offset */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2056 struct composition *cmp = composition_table[it->cmp_id];
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2057
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2058 /* Maybe translate single-byte characters to multibyte. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2059 it->char_to_display = it->c;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2060 if (unibyte_display_via_language_environment
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2061 && SINGLE_BYTE_CHAR_P (it->c)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2062 && (it->c >= 0240
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2063 || (it->c >= 0200
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2064 && !NILP (Vnonascii_translation_table))))
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2065 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2066 it->char_to_display = unibyte_char_to_multibyte (it->c);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2067 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2068
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2069 /* Get face and font to use. Encode IT->char_to_display. */
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2070 it->face_id = FACE_FOR_CHAR (it->f, face, it->char_to_display);
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2071 face = FACE_FROM_ID (it->f, it->face_id);
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2072 x_get_char_face_and_encoding (it->f, it->char_to_display,
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2073 it->face_id, &char2b, it->multibyte_p);
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2074 font = face->font;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2075
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2076 /* When no suitable font found, use the default font. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2077 font_not_found_p = font == NULL;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2078 if (font_not_found_p)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2079 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2080 font = FRAME_FONT (it->f);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2081 boff = it->f->output_data.x->baseline_offset;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2082 font_info = NULL;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2083 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2084 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2085 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2086 font_info = FONT_INFO_FROM_ID (it->f, face->font_info_id);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2087 boff = font_info->baseline_offset;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2088 if (font_info->vertical_centering)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2089 boff = VCENTER_BASELINE_OFFSET (font, it->f) - boff;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2090 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2091
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2092 /* There are no padding glyphs, so there is only one glyph to
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2093 produce for the composition. Important is that pixel_width,
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2094 ascent and descent are the values of what is drawn by
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2095 draw_glyphs (i.e. the values of the overall glyphs composed). */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2096 it->nglyphs = 1;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2097
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2098 /* If we have not yet calculated pixel size data of glyphs of
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2099 the composition for the current face font, calculate them
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2100 now. Theoretically, we have to check all fonts for the
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2101 glyphs, but that requires much time and memory space. So,
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2102 here we check only the font of the first glyph. This leads
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2103 to incorrect display very rarely, and C-l (recenter) can
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2104 correct the display anyway. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2105 if (cmp->font != (void *) font)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2106 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2107 /* Ascent and descent of the font of the first character of
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2108 this composition (adjusted by baseline offset). Ascent
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2109 and descent of overall glyphs should not be less than
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2110 them respectively. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2111 int font_ascent = font->ascent + boff;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2112 int font_descent = font->descent - boff;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2113 /* Bounding box of the overall glyphs. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2114 int leftmost, rightmost, lowest, highest;
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2115 int i, width, ascent, descent;
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2116
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2117 cmp->font = (void *) font;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2118
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2119 /* Initialize the bounding box. */
34159
a734985ec0bc (x_produce_glyphs): If a font for a component of
Kenichi Handa <handa@m17n.org>
parents: 34099
diff changeset
2120 if (font_info
a734985ec0bc (x_produce_glyphs): If a font for a component of
Kenichi Handa <handa@m17n.org>
parents: 34099
diff changeset
2121 && (pcm = x_per_char_metric (font, &char2b)))
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2122 {
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2123 width = pcm->width;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2124 ascent = pcm->ascent;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2125 descent = pcm->descent;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2126 }
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2127 else
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2128 {
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2129 width = FONT_WIDTH (font);
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2130 ascent = font->ascent;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2131 descent = font->descent;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2132 }
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2133
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2134 rightmost = width;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2135 lowest = - descent + boff;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2136 highest = ascent + boff;
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2137 leftmost = 0;
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2138
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2139 if (font_info
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2140 && font_info->default_ascent
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2141 && CHAR_TABLE_P (Vuse_default_ascent)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2142 && !NILP (Faref (Vuse_default_ascent,
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2143 make_number (it->char_to_display))))
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2144 highest = font_info->default_ascent + boff;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2145
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2146 /* Draw the first glyph at the normal position. It may be
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2147 shifted to right later if some other glyphs are drawn at
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2148 the left. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2149 cmp->offsets[0] = 0;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2150 cmp->offsets[1] = boff;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2151
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2152 /* Set cmp->offsets for the remaining glyphs. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2153 for (i = 1; i < cmp->glyph_len; i++)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2154 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2155 int left, right, btm, top;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2156 int ch = COMPOSITION_GLYPH (cmp, i);
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2157 int face_id = FACE_FOR_CHAR (it->f, face, ch);
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2158
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2159 face = FACE_FROM_ID (it->f, face_id);
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2160 x_get_char_face_and_encoding (it->f, ch, face->id, &char2b,
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2161 it->multibyte_p);
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2162 font = face->font;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2163 if (font == NULL)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2164 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2165 font = FRAME_FONT (it->f);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2166 boff = it->f->output_data.x->baseline_offset;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2167 font_info = NULL;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2168 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2169 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2170 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2171 font_info
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2172 = FONT_INFO_FROM_ID (it->f, face->font_info_id);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2173 boff = font_info->baseline_offset;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2174 if (font_info->vertical_centering)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2175 boff = VCENTER_BASELINE_OFFSET (font, it->f) - boff;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2176 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2177
34159
a734985ec0bc (x_produce_glyphs): If a font for a component of
Kenichi Handa <handa@m17n.org>
parents: 34099
diff changeset
2178 if (font_info
a734985ec0bc (x_produce_glyphs): If a font for a component of
Kenichi Handa <handa@m17n.org>
parents: 34099
diff changeset
2179 && (pcm = x_per_char_metric (font, &char2b)))
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2180 {
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2181 width = pcm->width;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2182 ascent = pcm->ascent;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2183 descent = pcm->descent;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2184 }
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2185 else
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2186 {
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2187 width = FONT_WIDTH (font);
34159
a734985ec0bc (x_produce_glyphs): If a font for a component of
Kenichi Handa <handa@m17n.org>
parents: 34099
diff changeset
2188 ascent = 1;
a734985ec0bc (x_produce_glyphs): If a font for a component of
Kenichi Handa <handa@m17n.org>
parents: 34099
diff changeset
2189 descent = 0;
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2190 }
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2191
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2192 if (cmp->method != COMPOSITION_WITH_RULE_ALTCHARS)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2193 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2194 /* Relative composition with or without
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2195 alternate chars. */
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2196 left = (leftmost + rightmost - width) / 2;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2197 btm = - descent + boff;
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2198 if (font_info && font_info->relative_compose
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2199 && (! CHAR_TABLE_P (Vignore_relative_composition)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2200 || NILP (Faref (Vignore_relative_composition,
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2201 make_number (ch)))))
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2202 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2203
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2204 if (- descent >= font_info->relative_compose)
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2205 /* One extra pixel between two glyphs. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2206 btm = highest + 1;
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2207 else if (ascent <= 0)
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2208 /* One extra pixel between two glyphs. */
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2209 btm = lowest - 1 - ascent - descent;
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2210 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2211 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2212 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2213 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2214 /* A composition rule is specified by an integer
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2215 value that encodes global and new reference
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2216 points (GREF and NREF). GREF and NREF are
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2217 specified by numbers as below:
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2218
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2219 0---1---2 -- ascent
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2220 | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2221 | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2222 | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2223 9--10--11 -- center
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2224 | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2225 ---3---4---5--- baseline
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2226 | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2227 6---7---8 -- descent
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2228 */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2229 int rule = COMPOSITION_RULE (cmp, i);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2230 int gref, nref, grefx, grefy, nrefx, nrefy;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2231
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2232 COMPOSITION_DECODE_RULE (rule, gref, nref);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2233 grefx = gref % 3, nrefx = nref % 3;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2234 grefy = gref / 3, nrefy = nref / 3;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2235
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2236 left = (leftmost
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2237 + grefx * (rightmost - leftmost) / 2
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2238 - nrefx * width / 2);
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2239 btm = ((grefy == 0 ? highest
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2240 : grefy == 1 ? 0
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2241 : grefy == 2 ? lowest
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2242 : (highest + lowest) / 2)
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2243 - (nrefy == 0 ? ascent + descent
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2244 : nrefy == 1 ? descent - boff
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2245 : nrefy == 2 ? 0
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2246 : (ascent + descent) / 2));
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2247 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2248
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2249 cmp->offsets[i * 2] = left;
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2250 cmp->offsets[i * 2 + 1] = btm + descent;
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2251
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2252 /* Update the bounding box of the overall glyphs. */
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2253 right = left + width;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2254 top = btm + descent + ascent;
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2255 if (left < leftmost)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2256 leftmost = left;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2257 if (right > rightmost)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2258 rightmost = right;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2259 if (top > highest)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2260 highest = top;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2261 if (btm < lowest)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2262 lowest = btm;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2263 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2264
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2265 /* If there are glyphs whose x-offsets are negative,
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2266 shift all glyphs to the right and make all x-offsets
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2267 non-negative. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2268 if (leftmost < 0)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2269 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2270 for (i = 0; i < cmp->glyph_len; i++)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2271 cmp->offsets[i * 2] -= leftmost;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2272 rightmost -= leftmost;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2273 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2274
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2275 cmp->pixel_width = rightmost;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2276 cmp->ascent = highest;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2277 cmp->descent = - lowest;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2278 if (cmp->ascent < font_ascent)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2279 cmp->ascent = font_ascent;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2280 if (cmp->descent < font_descent)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2281 cmp->descent = font_descent;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2282 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2283
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2284 it->pixel_width = cmp->pixel_width;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2285 it->ascent = it->phys_ascent = cmp->ascent;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2286 it->descent = it->phys_descent = cmp->descent;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2287
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2288 if (face->box != FACE_NO_BOX)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2289 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2290 int thick = face->box_line_width;
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2291
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2292 if (thick > 0)
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2293 {
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2294 it->ascent += thick;
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2295 it->descent += thick;
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2296 }
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2297 else
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2298 thick = - thick;
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2299
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2300 if (it->start_of_box_run_p)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2301 it->pixel_width += thick;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2302 if (it->end_of_box_run_p)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2303 it->pixel_width += thick;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2304 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2305
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2306 /* If face has an overline, add the height of the overline
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2307 (1 pixel) and a 1 pixel margin to the character height. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2308 if (face->overline_p)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2309 it->ascent += 2;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2310
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2311 take_vertical_position_into_account (it);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2312
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2313 if (it->glyph_row)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2314 x_append_composite_glyph (it);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2315 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2316 else if (it->what == IT_IMAGE)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2317 x_produce_image_glyph (it);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2318 else if (it->what == IT_STRETCH)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2319 x_produce_stretch_glyph (it);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2320
29458
679888a29324 (x_produce_glyphs): Don't xassert `it->descent > 0';
Gerd Moellmann <gerd@gnu.org>
parents: 29435
diff changeset
2321 /* Accumulate dimensions. Note: can't assume that it->descent > 0
679888a29324 (x_produce_glyphs): Don't xassert `it->descent > 0';
Gerd Moellmann <gerd@gnu.org>
parents: 29435
diff changeset
2322 because this isn't true for images with `:ascent 100'. */
679888a29324 (x_produce_glyphs): Don't xassert `it->descent > 0';
Gerd Moellmann <gerd@gnu.org>
parents: 29435
diff changeset
2323 xassert (it->ascent >= 0 && it->descent >= 0);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2324 if (it->area == TEXT_AREA)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2325 it->current_x += it->pixel_width;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2326
28686
b02f0d91b5aa (x_produce_glyphs): Remove reference to struct it's
Gerd Moellmann <gerd@gnu.org>
parents: 28629
diff changeset
2327 it->descent += it->extra_line_spacing;
b02f0d91b5aa (x_produce_glyphs): Remove reference to struct it's
Gerd Moellmann <gerd@gnu.org>
parents: 28629
diff changeset
2328
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2329 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
2330 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
2331 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
2332 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
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 /* 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
2337 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
2338
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2339 int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2340 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
2341 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2342 enum face_id face_id;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2343 {
34030
f9d77d3fc85d (x_estimate_mode_line_height): If `mode-line' face
Gerd Moellmann <gerd@gnu.org>
parents: 34008
diff changeset
2344 int height = FONT_HEIGHT (FRAME_FONT (f));
24991
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 /* 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
2347 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
2348 if (FRAME_FACE_CACHE (f))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2349 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2350 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
2351 if (face)
34030
f9d77d3fc85d (x_estimate_mode_line_height): If `mode-line' face
Gerd Moellmann <gerd@gnu.org>
parents: 34008
diff changeset
2352 {
f9d77d3fc85d (x_estimate_mode_line_height): If `mode-line' face
Gerd Moellmann <gerd@gnu.org>
parents: 34008
diff changeset
2353 if (face->font)
f9d77d3fc85d (x_estimate_mode_line_height): If `mode-line' face
Gerd Moellmann <gerd@gnu.org>
parents: 34008
diff changeset
2354 height = FONT_HEIGHT (face->font);
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2355 if (face->box_line_width > 0)
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2356 height += 2 * face->box_line_width;
34030
f9d77d3fc85d (x_estimate_mode_line_height): If `mode-line' face
Gerd Moellmann <gerd@gnu.org>
parents: 34008
diff changeset
2357 }
24991
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2360 return height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2361 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2362
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 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2365 Glyph display
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2368 /* 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
2369
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2370 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
2371 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
2372 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
2373 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
2374
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2375 struct glyph_string
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2376 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2377 /* X-origin of the string. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2378 int x;
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 /* 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
2381 int y, ybase;
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 /* 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
2384 int width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2385
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2386 /* 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
2387 int background_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2388
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2389 /* 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
2390 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
2391 font the string is drawn in. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2392 int height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2393
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2394 /* 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
2395 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
2396 -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
2397 int left_overhang;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2398
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2399 /* 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
2400 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
2401 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
2402 int right_overhang;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2403
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2404 /* 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
2405 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2406
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2407 /* 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
2408 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2409
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2410 /* X display and window for convenience. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2411 Display *display;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2412 Window window;
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 /* 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
2415 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
2416 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2417
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2418 /* The area within row. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2419 enum glyph_row_area area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2420
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2421 /* 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
2422 XChar2b *char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2423 int nchars;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2424
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2425 /* 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
2426 enum draw_glyphs_face hl;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2427
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2428 /* 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
2429 struct face *face;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2430
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2431 /* 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
2432 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2433
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2434 /* Font info for this string. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2435 struct font_info *font_info;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2436
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2437 /* Non-null means this string describes (part of) a composition.
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2438 All characters from char2b are drawn composed. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2439 struct composition *cmp;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2440
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2441 /* Index of this glyph string's first character in the glyph
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2442 definition of CMP. If this is zero, this glyph string describes
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2443 the first character of a composition. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2444 int gidx;
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 /* 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
2447 of the window's drawing area. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2448 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
2449
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2450 /* 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
2451 unsigned background_filled_p : 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2452
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2453 /* 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
2454 unsigned two_byte_p : 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2455
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2456 /* 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
2457 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
2458 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
2459 unsigned font_not_found_p : 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2460
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2461 /* 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
2462 stipple pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2463 unsigned stippled_p : 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2464
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2465 /* 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
2466 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
2467 string appears in as clip rect. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2468 unsigned for_overlaps_p : 1;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2469
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2470 /* 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
2471 GC gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2472
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2473 /* 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
2474 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
2475 font_not_found_p is 1. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2476 struct glyph *first_glyph;
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 /* Image, if any. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2479 struct image *img;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2480
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2481 struct glyph_string *next, *prev;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2482 };
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2483
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2484
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
2485 #if 0
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2486
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2487 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2488 x_dump_glyph_string (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2489 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2490 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2491 fprintf (stderr, "glyph string\n");
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2492 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
2493 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
2494 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
2495 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
2496 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
2497 s->left_overhang, s->right_overhang);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2498 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
2499 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
2500 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
2501 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
2502 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
2503 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2504
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2505 #endif /* GLYPH_DEBUG */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2506
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2507
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2508
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2509 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
2510 struct glyph_string **,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2511 struct glyph_string *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2512 struct glyph_string *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2513 static void x_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
2514 struct glyph_string **,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2515 struct glyph_string *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2516 struct glyph_string *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2517 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
2518 struct glyph_string **,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2519 struct glyph_string *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2520 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
2521 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
2522 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
2523 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
2524 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
2525 int));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2526 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
2527 XChar2b *, struct window *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2528 struct glyph_row *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2529 enum glyph_row_area, int,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2530 enum draw_glyphs_face));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2531 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
2532 enum glyph_row_area, int, int,
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2533 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
2534 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
2535 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
2536 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
2537 int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2538 static void x_draw_glyph_string_foreground P_ ((struct glyph_string *));
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2539 static void x_draw_composite_glyph_string_foreground P_ ((struct glyph_string *));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2540 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
2541 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
2542 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
2543 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
2544 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
2545 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
2546 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
2547 int *, int *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2548 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
2549 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
2550 unsigned long *, double, int));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2551 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
2552 double, int, unsigned long));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2553 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
2554 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
2555 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
2556 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
2557 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
2558 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
2559 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
2560 int, int, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2561 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
2562 int, int, int, int, XRectangle *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2563 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
2564 int, int, int, XRectangle *));
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2565 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
2566 enum glyph_row_area));
30137
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
2567 static int x_fill_stretch_glyph_string P_ ((struct glyph_string *,
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
2568 struct glyph_row *,
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
2569 enum glyph_row_area, int, int));
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2570
29619
d171b4754825 (x_check_font) [GLYPH_DEBUG]: Add prototype.
Gerd Moellmann <gerd@gnu.org>
parents: 29600
diff changeset
2571 #if GLYPH_DEBUG
d171b4754825 (x_check_font) [GLYPH_DEBUG]: Add prototype.
Gerd Moellmann <gerd@gnu.org>
parents: 29600
diff changeset
2572 static void x_check_font P_ ((struct frame *, XFontStruct *));
d171b4754825 (x_check_font) [GLYPH_DEBUG]: Add prototype.
Gerd Moellmann <gerd@gnu.org>
parents: 29600
diff changeset
2573 #endif
d171b4754825 (x_check_font) [GLYPH_DEBUG]: Add prototype.
Gerd Moellmann <gerd@gnu.org>
parents: 29600
diff changeset
2574
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2575
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2576 /* 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
2577 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
2578
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2579 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2580 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
2581 struct glyph_string **head, **tail;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2582 struct glyph_string *h, *t;
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 if (h)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2585 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2586 if (*head)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2587 (*tail)->next = h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2588 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2589 *head = h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2590 h->prev = *tail;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2591 *tail = t;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2592 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2593 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2594
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2595
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2596 /* 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
2597 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
2598 result. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2599
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2600 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2601 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
2602 struct glyph_string **head, **tail;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2603 struct glyph_string *h, *t;
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 if (h)
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 if (*head)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2608 (*head)->prev = t;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2609 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2610 *tail = t;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2611 t->next = *head;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2612 *head = h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2613 }
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
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 /* 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
2618 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
2619
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2620 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2621 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
2622 struct glyph_string **head, **tail;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2623 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2624 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2625 s->next = s->prev = NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2626 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
2627 }
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 /* 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
2631 face. */
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 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2634 x_set_cursor_gc (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2635 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2636 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2637 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
2638 && 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
2639 && s->face->foreground == FRAME_FOREGROUND_PIXEL (s->f)
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2640 && !s->cmp)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2641 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
2642 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2643 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2644 /* 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
2645 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2646 unsigned long mask;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2647
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2648 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
2649 xgcv.foreground = s->face->background;
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 /* 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
2652 if (xgcv.foreground == xgcv.background)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2653 xgcv.foreground = s->face->foreground;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2654 if (xgcv.foreground == xgcv.background)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2655 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
2656 if (xgcv.foreground == xgcv.background)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2657 xgcv.foreground = s->face->foreground;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2658
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2659 /* 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
2660 if (xgcv.background == s->face->background
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2661 && xgcv.foreground == s->face->foreground)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2662 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2663 xgcv.background = s->face->foreground;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2664 xgcv.foreground = s->face->background;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2665 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2666
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2667 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
2668 xgcv.font = s->font->fid;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2669 xgcv.graphics_exposures = False;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2670 mask = GCForeground | GCBackground | GCFont | GCGraphicsExposures;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2671
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2672 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
2673 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
2674 mask, &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2675 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2676 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
2677 = 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
2678
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2679 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
2680 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2681 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2682
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2683
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2684 /* 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
2685
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2686 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2687 x_set_mouse_face_gc (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2688 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2689 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2690 int face_id;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2691 struct face *face;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2692
35315
1f5511b1d5ea (x_set_mouse_face_gc): If the last use mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 35309
diff changeset
2693 /* What face has to be used last for the mouse face? */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2694 face_id = FRAME_X_DISPLAY_INFO (s->f)->mouse_face_face_id;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2695 face = FACE_FROM_ID (s->f, face_id);
35315
1f5511b1d5ea (x_set_mouse_face_gc): If the last use mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 35309
diff changeset
2696 if (face == NULL)
1f5511b1d5ea (x_set_mouse_face_gc): If the last use mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 35309
diff changeset
2697 face = FACE_FROM_ID (s->f, MOUSE_FACE_ID);
1f5511b1d5ea (x_set_mouse_face_gc): If the last use mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 35309
diff changeset
2698
29393
3ad9354ade23 (x_set_mouse_face_gc): If first glyph isn't a character
Gerd Moellmann <gerd@gnu.org>
parents: 28793
diff changeset
2699 if (s->first_glyph->type == CHAR_GLYPH)
3ad9354ade23 (x_set_mouse_face_gc): If first glyph isn't a character
Gerd Moellmann <gerd@gnu.org>
parents: 28793
diff changeset
2700 face_id = FACE_FOR_CHAR (s->f, face, s->first_glyph->u.ch);
3ad9354ade23 (x_set_mouse_face_gc): If first glyph isn't a character
Gerd Moellmann <gerd@gnu.org>
parents: 28793
diff changeset
2701 else
3ad9354ade23 (x_set_mouse_face_gc): If first glyph isn't a character
Gerd Moellmann <gerd@gnu.org>
parents: 28793
diff changeset
2702 face_id = FACE_FOR_CHAR (s->f, face, 0);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2703 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
2704 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
2705
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2706 /* 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
2707 if (s->font == s->face->font)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2708 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2709 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2710 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2711 /* 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
2712 but font FONT. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2713 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2714 unsigned long mask;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2715
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2716 xgcv.background = s->face->background;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2717 xgcv.foreground = s->face->foreground;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2718 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
2719 xgcv.font = s->font->fid;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2720 xgcv.graphics_exposures = False;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2721 mask = GCForeground | GCBackground | GCFont | GCGraphicsExposures;
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 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
2724 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
2725 mask, &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2726 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2727 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
2728 = 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
2729
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2730 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
2731 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2732
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2733 xassert (s->gc != 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2734 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2735
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2736
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2737 /* 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
2738 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
2739 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
2740
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2741 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2742 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
2743 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2744 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2745 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2746 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2747
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2748
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2749 /* Set 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
2750 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
2751 pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2752
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2753 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2754 x_set_glyph_string_gc (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2755 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2756 {
30137
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
2757 PREPARE_FACE_FOR_DISPLAY (s->f, s->face);
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
2758
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2759 if (s->hl == DRAW_NORMAL_TEXT)
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 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2762 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
2763 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2764 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
2765 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2766 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
2767 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
2768 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2769 else if (s->hl == DRAW_CURSOR)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2770 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2771 x_set_cursor_gc (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2772 s->stippled_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2773 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2774 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
2775 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2776 x_set_mouse_face_gc (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2777 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
2778 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2779 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
2780 || s->hl == DRAW_IMAGE_SUNKEN)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2781 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2782 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2783 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
2784 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2785 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2786 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2787 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2788 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
2789 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2790
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2791 /* GC must have been set. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2792 xassert (s->gc != 0);
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
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 /* 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
2797
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2798 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2799 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
2800 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2801 XRectangle *r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2802 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2803 if (s->row->full_width_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2804 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2805 /* 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
2806 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
2807
3a09aae52441 (x_get_glyph_string_clip_rect): Take internal border
Gerd Moellmann <gerd@gnu.org>
parents: 25068
diff changeset
2808 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
2809 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
2810
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2811 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
2812 {
25079
3a09aae52441 (x_get_glyph_string_clip_rect): Take internal border
Gerd Moellmann <gerd@gnu.org>
parents: 25068
diff changeset
2813 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
2814 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
2815 r->x -= width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2816 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2817
25083
d3b7d7d2bca8 (x_setup_relief_color): Don't try smart color allocation
Gerd Moellmann <gerd@gnu.org>
parents: 25079
diff changeset
2818 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
2819
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2820 /* 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
2821 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
2822 if (s->w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2823 r->height = s->row->visible_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2824 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2825 r->height = s->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2826 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2827 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2828 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2829 /* 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
2830 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
2831 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
2832 r->height = s->row->visible_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2833 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2834
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2835 /* 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
2836 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
2837 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
2838 if (!s->row->full_width_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2839 && MATRIX_ROW_PARTIALLY_VISIBLE_AT_TOP_P (s->w, s->row))
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
2840 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
2841 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2842 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
2843
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
2844 /* 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
2845 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
2846 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
2847 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
2848
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2849 /* 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
2850 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
2851 intentionally draws over other lines. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2852 if (s->for_overlaps_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2853 {
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
2854 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
2855 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
2856 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2857
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2858 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
2859 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2862 /* 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
2863 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
2864
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2865 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2866 x_set_glyph_string_clipping (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2867 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2868 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2869 XRectangle r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2870 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
2871 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
2872 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2873
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2874
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2875 /* Compute left and right overhang of glyph string S. If S is a glyph
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2876 string for a composition, assume overhangs don't exist. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2877
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2878 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2879 x_compute_glyph_string_overhangs (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2880 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2881 {
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2882 if (s->cmp == NULL
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2883 && s->first_glyph->type == CHAR_GLYPH)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2884 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2885 XCharStruct cs;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2886 int direction, font_ascent, font_descent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2887 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
2888 &font_ascent, &font_descent, &cs);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2889 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
2890 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
2891 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2892 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2895 /* 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
2896 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
2897 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
2898
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2899 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2900 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
2901 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2902 int x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2903 int backward_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2904 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2905 if (backward_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2906 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2907 while (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2908 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2909 x_compute_glyph_string_overhangs (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2910 x -= s->width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2911 s->x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2912 s = s->prev;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2913 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2914 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2915 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2916 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2917 while (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2918 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2919 x_compute_glyph_string_overhangs (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2920 s->x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2921 x += s->width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2922 s = s->next;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2923 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2924 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2925 }
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 /* Set *LEFT and *RIGHT to the left and right overhang of GLYPH on
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2929 frame F. Overhangs of glyphs other than type CHAR_GLYPH are
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2930 assumed to be zero. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2931
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2932 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2933 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
2934 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2935 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2936 int *left, *right;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2937 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2938 *left = *right = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2939
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2940 if (glyph->type == CHAR_GLYPH)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2941 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2942 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2943 struct face *face;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2944 struct font_info *font_info;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2945 XChar2b char2b;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2946 XCharStruct *pcm;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2947
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2948 face = x_get_glyph_face_and_encoding (f, glyph, &char2b, NULL);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2949 font = face->font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2950 font_info = FONT_INFO_FROM_ID (f, face->font_info_id);
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2951 if (font
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2952 && (pcm = x_per_char_metric (font, &char2b)))
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2953 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2954 if (pcm->rbearing > pcm->width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2955 *right = pcm->rbearing - pcm->width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2956 if (pcm->lbearing < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2957 *left = -pcm->lbearing;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2958 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2959 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2960 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2961
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2962
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2963 /* 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
2964 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
2965 if no glyphs are overwritten. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2966
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2967 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2968 x_left_overwritten (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2969 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2970 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2971 int k;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2972
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2973 if (s->left_overhang)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2974 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2975 int x = 0, i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2976 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
2977 int first = s->first_glyph - glyphs;
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 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
2980 x -= glyphs[i].pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2981
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2982 k = i + 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2983 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2984 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2985 k = -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2986
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2987 return k;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2988 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2989
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2990
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2991 /* 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
2992 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
2993 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
2994
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2995 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2996 x_left_overwriting (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2997 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2998 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2999 int i, k, x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3000 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
3001 int first = s->first_glyph - glyphs;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3002
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3003 k = -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3004 x = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3005 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
3006 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3007 int left, right;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3008 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
3009 if (x + right > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3010 k = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3011 x -= glyphs[i].pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3012 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3013
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3014 return k;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3015 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3016
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3017
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3018 /* 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
3019 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
3020 no such glyph is found. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3021
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3022 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3023 x_right_overwritten (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3024 struct glyph_string *s;
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 int k = -1;
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 if (s->right_overhang)
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 int x = 0, i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3031 struct glyph *glyphs = s->row->glyphs[s->area];
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3032 int first = (s->first_glyph - glyphs) + (s->cmp ? 1 : s->nchars);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3033 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
3034
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3035 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
3036 x += glyphs[i].pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3037
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3038 k = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3039 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3040
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3041 return k;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3042 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3043
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3044
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3045 /* 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
3046 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
3047 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
3048
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
3049 static int
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3050 x_right_overwriting (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3051 struct glyph_string *s;
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 int i, k, x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3054 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
3055 struct glyph *glyphs = s->row->glyphs[s->area];
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3056 int first = (s->first_glyph - glyphs) + (s->cmp ? 1 : s->nchars);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3057
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3058 k = -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3059 x = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3060 for (i = first; i < end; ++i)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3061 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3062 int left, right;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3063 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
3064 if (x - left < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3065 k = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3066 x += glyphs[i].pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3067 }
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 return k;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3070 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3071
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3072
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3073 /* 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
3074
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3075 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3076 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
3077 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3078 int x, y, w, h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3079 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3080 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3081 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
3082 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
3083 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
3084 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
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3088 /* 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
3089 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
3090 background even if it wouldn't be drawn normally. This is used
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3091 when a string preceding S draws into the background of S, or S
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3092 contains the first component of a composition. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3093
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3094 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3095 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
3096 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3097 int force_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3098 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3099 /* 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
3100 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
3101 if (!s->background_filled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3102 {
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
3103 int box_line_width = max (s->face->box_line_width, 0);
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
3104
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3105 if (s->stippled_p)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3106 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3107 /* Fill background with a stipple pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3108 XSetFillStyle (s->display, s->gc, FillOpaqueStippled);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3109 XFillRectangle (s->display, s->window, s->gc, s->x,
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
3110 s->y + box_line_width,
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3111 s->background_width,
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
3112 s->height - 2 * box_line_width);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3113 XSetFillStyle (s->display, s->gc, FillSolid);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3114 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3115 }
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
3116 else if (FONT_HEIGHT (s->font) < s->height - 2 * box_line_width
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3117 || s->font_not_found_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3118 || 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
3119 || force_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3120 {
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
3121 x_clear_glyph_string_rect (s, s->x, s->y + box_line_width,
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3122 s->background_width,
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
3123 s->height - 2 * box_line_width);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3124 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3125 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3126 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3127 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3128
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3129
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3130 /* 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
3131
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3132 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3133 x_draw_glyph_string_foreground (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3134 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3135 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3136 int i, x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3137
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3138 /* 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
3139 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
3140 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
3141 && s->first_glyph->left_box_line_p)
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
3142 x = s->x + abs (s->face->box_line_width);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3143 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3144 x = s->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3145
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3146 /* Draw characters of S as rectangles if S's font could not be
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3147 loaded. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3148 if (s->font_not_found_p)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3149 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3150 for (i = 0; i < s->nchars; ++i)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3151 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3152 struct glyph *g = s->first_glyph + i;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3153 XDrawRectangle (s->display, s->window,
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3154 s->gc, x, s->y, g->pixel_width - 1,
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3155 s->height - 1);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3156 x += g->pixel_width;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3157 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3158 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3159 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3160 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3161 char *char1b = (char *) s->char2b;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3162 int boff = s->font_info->baseline_offset;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3163
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3164 if (s->font_info->vertical_centering)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3165 boff = VCENTER_BASELINE_OFFSET (s->font, s->f) - boff;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3166
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3167 /* If we can use 8-bit functions, condense S->char2b. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3168 if (!s->two_byte_p)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3169 for (i = 0; i < s->nchars; ++i)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3170 char1b[i] = s->char2b[i].byte2;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3171
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3172 /* Draw text with XDrawString if background has already been
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3173 filled. Otherwise, use XDrawImageString. (Note that
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3174 XDrawImageString is usually faster than XDrawString.) Always
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3175 use XDrawImageString when drawing the cursor so that there is
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3176 no chance that characters under a box cursor are invisible. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3177 if (s->for_overlaps_p
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3178 || (s->background_filled_p && s->hl != DRAW_CURSOR))
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3179 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3180 /* Draw characters with 16-bit or 8-bit functions. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3181 if (s->two_byte_p)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3182 XDrawString16 (s->display, s->window, s->gc, x,
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3183 s->ybase - boff, s->char2b, s->nchars);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3184 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3185 XDrawString (s->display, s->window, s->gc, x,
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3186 s->ybase - boff, char1b, s->nchars);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3187 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3188 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3189 {
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3190 if (s->two_byte_p)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3191 XDrawImageString16 (s->display, s->window, s->gc, x,
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3192 s->ybase - boff, s->char2b, s->nchars);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
3193 else
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3194 XDrawImageString (s->display, s->window, s->gc, x,
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3195 s->ybase - boff, char1b, s->nchars);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3196 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3197 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3198 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3199
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3200 /* Draw the foreground of composite glyph string S. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3201
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3202 static void
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3203 x_draw_composite_glyph_string_foreground (s)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3204 struct glyph_string *s;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3205 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3206 int i, x;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3207
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3208 /* If first glyph of S has a left box line, start drawing the text
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3209 of S to the right of that box line. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3210 if (s->face->box != FACE_NO_BOX
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3211 && s->first_glyph->left_box_line_p)
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
3212 x = s->x + abs (s->face->box_line_width);
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3213 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3214 x = s->x;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3215
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3216 /* S is a glyph string for a composition. S->gidx is the index of
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3217 the first character drawn for glyphs of this composition.
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3218 S->gidx == 0 means we are drawing the very first character of
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3219 this composition. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3220
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3221 /* Draw a rectangle for the composition if the font for the very
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3222 first character of the composition could not be loaded. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3223 if (s->font_not_found_p)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3224 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3225 if (s->gidx == 0)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3226 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
3227 s->width - 1, s->height - 1);
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3228 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3229 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3230 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3231 for (i = 0; i < s->nchars; i++, ++s->gidx)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3232 XDrawString16 (s->display, s->window, s->gc,
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3233 x + s->cmp->offsets[s->gidx * 2],
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3234 s->ybase - s->cmp->offsets[s->gidx * 2 + 1],
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3235 s->char2b + i, 1);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3236 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3237 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3238
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3239
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3240 #ifdef USE_X_TOOLKIT
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3241
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3242 static struct frame *x_frame_of_widget P_ ((Widget));
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3243
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3244
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3245 /* Return the frame on which widget WIDGET is used.. Abort if frame
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3246 cannot be determined. */
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3247
29749
4235764941b5 (x_frame_of_widget): Add `static' to declaration (for pcc).
Dave Love <fx@gnu.org>
parents: 29744
diff changeset
3248 static struct frame *
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3249 x_frame_of_widget (widget)
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3250 Widget widget;
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3251 {
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3252 struct x_display_info *dpyinfo;
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
3253 Lisp_Object tail;
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3254 struct frame *f;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3255
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3256 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
3257
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3258 /* 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
3259 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
3260 (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
3261 x_any_window_to_frame. */
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3262 while (!XtIsTopLevelShell (widget))
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3263 widget = XtParent (widget);
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3264
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3265 /* 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
3266 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
3267 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
3268 if (GC_FRAMEP (XCAR (tail))
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3269 && (f = XFRAME (XCAR (tail)),
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3270 (f->output_data.nothing != 1
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3271 && FRAME_X_DISPLAY_INFO (f) == dpyinfo))
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3272 && f->output_data.x->widget == widget)
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3273 return f;
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3274
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3275 abort ();
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3276 }
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3277
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3278
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3279 /* Allocate the color COLOR->pixel on the screen and display of
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3280 widget WIDGET in colormap CMAP. If an exact match cannot be
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3281 allocated, try the nearest color available. Value is non-zero
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3282 if successful. This is called from lwlib. */
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3283
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3284 int
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3285 x_alloc_nearest_color_for_widget (widget, cmap, color)
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3286 Widget widget;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3287 Colormap cmap;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3288 XColor *color;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3289 {
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3290 struct frame *f = x_frame_of_widget (widget);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3291 return x_alloc_nearest_color (f, cmap, color);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3292 }
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3293
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3294
31340
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3295 /* Allocate a color which is lighter or darker than *PIXEL by FACTOR
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3296 or DELTA. Try a color with RGB values multiplied by FACTOR first.
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3297 If this produces the same color as PIXEL, try a color where all RGB
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3298 values have DELTA added. Return the allocated color in *PIXEL.
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3299 DISPLAY is the X display, CMAP is the colormap to operate on.
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3300 Value is non-zero if successful. */
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3301
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3302 int
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3303 x_alloc_lighter_color_for_widget (widget, display, cmap, pixel, factor, delta)
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3304 Widget widget;
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3305 Display *display;
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3306 Colormap cmap;
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3307 unsigned long *pixel;
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3308 double factor;
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3309 int delta;
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3310 {
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3311 struct frame *f = x_frame_of_widget (widget);
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3312 return x_alloc_lighter_color (f, display, cmap, pixel, factor, delta);
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3313 }
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3314
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3315
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3316 #endif /* USE_X_TOOLKIT */
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3317
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3318
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3319 /* Value is an array of XColor structures for the contents of the
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3320 color map of frame F. Set *NCELLS to the size of the array.
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3321 Note that this probably shouldn't be called for large color maps,
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3322 say a 24-bit TrueColor map. */
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3323
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3324 static const XColor *
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3325 x_color_cells (f, ncells)
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3326 struct frame *f;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3327 int *ncells;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3328 {
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3329 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3330
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3331 if (dpyinfo->color_cells == NULL)
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3332 {
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3333 Display *display = FRAME_X_DISPLAY (f);
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3334 Screen *screen = FRAME_X_SCREEN (f);
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3335 int i;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3336
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3337 dpyinfo->ncolor_cells
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3338 = XDisplayCells (display, XScreenNumberOfScreen (screen));
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3339 dpyinfo->color_cells
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3340 = (XColor *) xmalloc (dpyinfo->ncolor_cells
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3341 * sizeof *dpyinfo->color_cells);
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3342
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3343 for (i = 0; i < dpyinfo->ncolor_cells; ++i)
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3344 dpyinfo->color_cells[i].pixel = i;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3345
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3346 XQueryColors (display, FRAME_X_COLORMAP (f),
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3347 dpyinfo->color_cells, dpyinfo->ncolor_cells);
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3348 }
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3349
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3350 *ncells = dpyinfo->ncolor_cells;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3351 return dpyinfo->color_cells;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3352 }
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3353
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3354
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3355 /* On frame F, translate pixel colors to RGB values for the NCOLORS
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3356 colors in COLORS. Use cached information, if available. */
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3357
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3358 void
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3359 x_query_colors (f, colors, ncolors)
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3360 struct frame *f;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3361 XColor *colors;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3362 int ncolors;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3363 {
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3364 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3365
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3366 if (dpyinfo->color_cells)
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3367 {
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3368 int i;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3369 for (i = 0; i < ncolors; ++i)
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3370 {
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3371 unsigned long pixel = colors[i].pixel;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3372 xassert (pixel < dpyinfo->ncolor_cells);
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3373 xassert (dpyinfo->color_cells[pixel].pixel == pixel);
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3374 colors[i] = dpyinfo->color_cells[pixel];
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3375 }
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3376 }
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3377 else
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3378 XQueryColors (FRAME_X_DISPLAY (f), FRAME_X_COLORMAP (f), colors, ncolors);
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3379 }
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3380
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3381
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3382 /* On frame F, translate pixel color to RGB values for the color in
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3383 COLOR. Use cached information, if available. */
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3384
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3385 void
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3386 x_query_color (f, color)
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3387 struct frame *f;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3388 XColor *color;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3389 {
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3390 x_query_colors (f, color, 1);
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3391 }
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3392
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3393
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3394 /* 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
3395 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
3396 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
3397 color allocated. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3398
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3399 int
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3400 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
3401 struct frame *f;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3402 Colormap cmap;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3403 XColor *color;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3404 {
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3405 Display *display = FRAME_X_DISPLAY (f);
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3406 Screen *screen = FRAME_X_SCREEN (f);
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3407 int rc;
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3408
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3409 gamma_correct (f, color);
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3410 rc = XAllocColor (display, cmap, color);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3411 if (rc == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3412 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3413 /* 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
3414 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
3415 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
3416 color matching with StaticColor visuals. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3417 int nearest, i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3418 unsigned long nearest_delta = ~0;
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3419 int ncells;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3420 const XColor *cells = x_color_cells (f, &ncells);
24991
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 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
3423 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3424 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
3425 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
3426 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
3427 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
3428
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3429 if (delta < nearest_delta)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3430 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3431 nearest = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3432 nearest_delta = delta;
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 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3435
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3436 color->red = cells[nearest].red;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3437 color->green = cells[nearest].green;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3438 color->blue = cells[nearest].blue;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3439 rc = XAllocColor (display, cmap, color);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3440 }
33062
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3441 else
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3442 {
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3443 /* If allocation succeeded, and the allocated pixel color is not
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3444 equal to a cached pixel color recorded earlier, there was a
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3445 change in the colormap, so clear the color cache. */
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3446 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3447 XColor *cached_color;
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3448
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3449 if (dpyinfo->color_cells
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3450 && (cached_color = &dpyinfo->color_cells[color->pixel],
33064
9de33d895c6c (x_alloc_nearest_color): Fix last change to compare
Gerd Moellmann <gerd@gnu.org>
parents: 33062
diff changeset
3451 (cached_color->red != color->red
9de33d895c6c (x_alloc_nearest_color): Fix last change to compare
Gerd Moellmann <gerd@gnu.org>
parents: 33062
diff changeset
3452 || cached_color->blue != color->blue
9de33d895c6c (x_alloc_nearest_color): Fix last change to compare
Gerd Moellmann <gerd@gnu.org>
parents: 33062
diff changeset
3453 || cached_color->green != color->green)))
33062
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3454 {
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3455 xfree (dpyinfo->color_cells);
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3456 dpyinfo->color_cells = NULL;
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3457 dpyinfo->ncolor_cells = 0;
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3458 }
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3459 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3460
28356
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3461 #ifdef DEBUG_X_COLORS
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3462 if (rc)
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3463 register_color (color->pixel);
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3464 #endif /* DEBUG_X_COLORS */
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3465
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3466 return rc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3467 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3468
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3469
28356
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3470 /* Allocate color PIXEL on frame F. PIXEL must already be allocated.
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3471 It's necessary to do this instead of just using PIXEL directly to
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3472 get color reference counts right. */
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3473
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3474 unsigned long
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3475 x_copy_color (f, pixel)
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3476 struct frame *f;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3477 unsigned long pixel;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3478 {
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3479 XColor color;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3480
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3481 color.pixel = pixel;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3482 BLOCK_INPUT;
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3483 x_query_color (f, &color);
28356
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3484 XAllocColor (FRAME_X_DISPLAY (f), FRAME_X_COLORMAP (f), &color);
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3485 UNBLOCK_INPUT;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3486 #ifdef DEBUG_X_COLORS
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3487 register_color (pixel);
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3488 #endif
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3489 return color.pixel;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3490 }
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3491
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3492
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3493 /* Allocate color PIXEL on display DPY. PIXEL must already be allocated.
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3494 It's necessary to do this instead of just using PIXEL directly to
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3495 get color reference counts right. */
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3496
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3497 unsigned long
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3498 x_copy_dpy_color (dpy, cmap, pixel)
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3499 Display *dpy;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3500 Colormap cmap;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3501 unsigned long pixel;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3502 {
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3503 XColor color;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3504
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3505 color.pixel = pixel;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3506 BLOCK_INPUT;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3507 XQueryColor (dpy, cmap, &color);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3508 XAllocColor (dpy, cmap, &color);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3509 UNBLOCK_INPUT;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3510 #ifdef DEBUG_X_COLORS
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3511 register_color (pixel);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3512 #endif
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3513 return color.pixel;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3514 }
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3515
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3516
33456
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
3517 /* Brightness beyond which a color won't have its highlight brightness
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
3518 boosted.
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
3519
33449
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3520 Nominally, highlight colors for `3d' faces are calculated by
33456
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
3521 brightening an object's color by a constant scale factor, but this
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
3522 doesn't yield good results for dark colors, so for colors who's
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
3523 brightness is less than this value (on a scale of 0-65535) have an
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
3524 use an additional additive factor.
33449
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3525
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3526 The value here is set so that the default menu-bar/mode-line color
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3527 (grey75) will not have its highlights changed at all. */
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3528 #define HIGHLIGHT_COLOR_DARK_BOOST_LIMIT 48000
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3529
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3530
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3531 /* 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
3532 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
3533 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
3534 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
3535 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
3536 Value is non-zero if successful. */
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 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3539 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
3540 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3541 Display *display;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3542 Colormap cmap;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3543 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
3544 double factor;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3545 int delta;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3546 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3547 XColor color, new;
33449
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3548 long bright;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3549 int success_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3550
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3551 /* Get RGB color values. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3552 color.pixel = *pixel;
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3553 x_query_color (f, &color);
24991
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 /* 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
3556 xassert (factor >= 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3557 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
3558 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
3559 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
3560
33456
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
3561 /* Calculate brightness of COLOR. */
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
3562 bright = (2 * color.red + 3 * color.green + color.blue) / 6;
33449
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3563
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3564 /* We only boost colors that are darker than
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3565 HIGHLIGHT_COLOR_DARK_BOOST_LIMIT. */
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3566 if (bright < HIGHLIGHT_COLOR_DARK_BOOST_LIMIT)
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3567 /* Make an additive adjustment to NEW, because it's dark enough so
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3568 that scaling by FACTOR alone isn't enough. */
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3569 {
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3570 /* How far below the limit this color is (0 - 1, 1 being darker). */
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3571 double dimness = 1 - (double)bright / HIGHLIGHT_COLOR_DARK_BOOST_LIMIT;
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3572 /* The additive adjustment. */
33456
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
3573 int min_delta = delta * dimness * factor / 2;
33449
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3574
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3575 if (factor < 1)
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3576 {
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3577 new.red = max (0, new.red - min_delta);
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3578 new.green = max (0, new.green - min_delta);
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3579 new.blue = max (0, new.blue - min_delta);
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3580 }
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3581 else
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3582 {
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3583 new.red = min (0xffff, min_delta + new.red);
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3584 new.green = min (0xffff, min_delta + new.green);
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3585 new.blue = min (0xffff, min_delta + new.blue);
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3586 }
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3587 }
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3588
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3589 /* Try to allocate the color. */
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3590 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
3591 if (success_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3592 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3593 if (new.pixel == *pixel)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3594 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3595 /* 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
3596 delta to the RGB values. */
27962
048184bb751e (x_alloc_lighter_color, x_setup_relief_color): Use
Gerd Moellmann <gerd@gnu.org>
parents: 27857
diff changeset
3597 x_free_colors (f, &new.pixel, 1);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3598
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3599 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
3600 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
3601 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
3602 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
3603 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3604 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3605 success_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3606 *pixel = new.pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3607 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3608
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3609 return success_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3610 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3611
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3612
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3613 /* 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
3614 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
3615 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
3616 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
3617 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
3618 be allocated, use DEFAULT_PIXEL, instead. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3619
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3620 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3621 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
3622 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3623 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
3624 double factor;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3625 int delta;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3626 unsigned long default_pixel;
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 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3629 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
3630 unsigned long mask = GCForeground | GCLineWidth | GCGraphicsExposures;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3631 unsigned long pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3632 unsigned long background = di->relief_background;
27985
4ba445af210b (x_term_init): Set Colormap member of x_display_info
Gerd Moellmann <gerd@gnu.org>
parents: 27974
diff changeset
3633 Colormap cmap = FRAME_X_COLORMAP (f);
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
3634 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
3635 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
3636
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3637 xgcv.graphics_exposures = False;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3638 xgcv.line_width = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3639
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3640 /* 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
3641 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
3642 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
3643 if (relief->gc
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3644 && relief->allocated_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3645 {
27962
048184bb751e (x_alloc_lighter_color, x_setup_relief_color): Use
Gerd Moellmann <gerd@gnu.org>
parents: 27857
diff changeset
3646 x_free_colors (f, &relief->pixel, 1);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3647 relief->allocated_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3648 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3649
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3650 /* Allocate new color. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3651 xgcv.foreground = default_pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3652 pixel = background;
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
3653 if (dpyinfo->n_planes != 1
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
3654 && 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
3655 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3656 relief->allocated_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3657 xgcv.foreground = relief->pixel = pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3658 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3659
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3660 if (relief->gc == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3661 {
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
3662 xgcv.stipple = dpyinfo->gray;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3663 mask |= GCStipple;
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
3664 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
3665 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3666 else
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
3667 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
3668 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3669
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3670
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3671 /* 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
3672
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3673 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3674 x_setup_relief_colors (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3675 struct 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 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
3678 unsigned long color;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3679
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3680 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
3681 color = s->face->box_color;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3682 else
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 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3685
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3686 /* 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
3687 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
3688 color = xgcv.background;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3689 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3690
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3691 if (di->white_relief.gc == 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3692 || color != di->relief_background)
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 di->relief_background = color;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3695 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
3696 WHITE_PIX_DEFAULT (s->f));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3697 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
3698 BLACK_PIX_DEFAULT (s->f));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3699 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3700 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3701
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3702
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3703 /* 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
3704 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
3705 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
3706 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
3707 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
3708 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
3709 when drawing. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3710
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3711 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3712 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
3713 raised_p, left_p, right_p, clip_rect)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
3714 struct frame *f;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3715 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
3716 XRectangle *clip_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3717 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3718 int i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3719 GC gc;
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 if (raised_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3722 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
3723 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3724 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
3725 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
3726
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3727 /* Top. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3728 for (i = 0; i < width; ++i)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3729 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
3730 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
3731 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
3732
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3733 /* Left. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3734 if (left_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3735 for (i = 0; i < width; ++i)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3736 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
3737 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
3738
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3739 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
3740 if (raised_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3741 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
3742 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3743 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
3744 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
3745
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3746 /* Bottom. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3747 for (i = 0; i < width; ++i)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3748 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
3749 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
3750 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
3751
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3752 /* Right. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3753 if (right_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3754 for (i = 0; i < width; ++i)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3755 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
3756 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
3757
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3758 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
3759 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3762 /* 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
3763 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
3764 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
3765 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
3766 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
3767 rectangle to use when drawing. */
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 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3770 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
3771 left_p, right_p, clip_rect)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3772 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3773 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
3774 XRectangle *clip_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3775 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3776 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3777
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3778 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
3779 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
3780 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
3781
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3782 /* Top. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3783 XFillRectangle (s->display, s->window, s->gc,
32513
545db232e60c (x_draw_box_rect): Fix the calculation of width and height for
Kenichi Handa <handa@m17n.org>
parents: 32401
diff changeset
3784 left_x, top_y, right_x - left_x + 1, width);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3785
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3786 /* Left. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3787 if (left_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3788 XFillRectangle (s->display, s->window, s->gc,
32513
545db232e60c (x_draw_box_rect): Fix the calculation of width and height for
Kenichi Handa <handa@m17n.org>
parents: 32401
diff changeset
3789 left_x, top_y, width, bottom_y - top_y + 1);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3790
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3791 /* Bottom. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3792 XFillRectangle (s->display, s->window, s->gc,
32513
545db232e60c (x_draw_box_rect): Fix the calculation of width and height for
Kenichi Handa <handa@m17n.org>
parents: 32401
diff changeset
3793 left_x, bottom_y - width + 1, right_x - left_x + 1, width);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3794
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3795 /* Right. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3796 if (right_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3797 XFillRectangle (s->display, s->window, s->gc,
32513
545db232e60c (x_draw_box_rect): Fix the calculation of width and height for
Kenichi Handa <handa@m17n.org>
parents: 32401
diff changeset
3798 right_x - width + 1, top_y, width, bottom_y - top_y + 1);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3799
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3800 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
3801 XSetClipMask (s->display, s->gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3802 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3803
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3804
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3805 /* 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
3806
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3807 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3808 x_draw_glyph_string_box (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3809 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3810 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3811 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
3812 int left_p, right_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3813 struct glyph *last_glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3814 XRectangle clip_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3815
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3816 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
3817 if (s->row->full_width_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3818 && !s->w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3819 {
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
3820 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
3821 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
3822 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
3823 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3824
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3825 /* The glyph that may have a right box line. */
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3826 last_glyph = (s->cmp || s->img
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3827 ? s->first_glyph
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3828 : s->first_glyph + s->nchars - 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3829
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
3830 width = abs (s->face->box_line_width);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3831 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
3832 left_x = s->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3833 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
3834 ? last_x - 1
25302
0f10c1eaf8fb (x_draw_glyph_string_box): Use the background width
Gerd Moellmann <gerd@gnu.org>
parents: 25269
diff changeset
3835 : 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
3836 top_y = s->y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3837 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
3838
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3839 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
3840 || (s->hl == DRAW_MOUSE_FACE
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3841 && (s->prev == NULL
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3842 || s->prev->hl != s->hl)));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3843 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
3844 || (s->hl == DRAW_MOUSE_FACE
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3845 && (s->next == NULL
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3846 || s->next->hl != s->hl)));
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 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
3849
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3850 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
3851 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
3852 left_p, right_p, &clip_rect);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3853 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3854 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3855 x_setup_relief_colors (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3856 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
3857 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
3858 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3861
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3862 /* 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
3863
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3864 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3865 x_draw_image_foreground (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3866 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3867 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3868 int x;
28785
796eafcfc070 (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 28686
diff changeset
3869 int y = s->ybase - image_ascent (s->img, s->face);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3870
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3871 /* 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
3872 right of that line. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3873 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
3874 && s->first_glyph->left_box_line_p)
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
3875 x = s->x + abs (s->face->box_line_width);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3876 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3877 x = s->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3878
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3879 /* 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
3880 by that margin. */
35276
008aea836cbc (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 35272
diff changeset
3881 x += s->img->hmargin;
008aea836cbc (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 35272
diff changeset
3882 y += s->img->vmargin;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3883
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3884 if (s->img->pixmap)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3885 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3886 if (s->img->mask)
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 /* 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
3889 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
3890 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
3891 (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
3892 manually. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3893 unsigned long mask = (GCClipMask | GCClipXOrigin | GCClipYOrigin
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3894 | GCFunction);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3895 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3896 XRectangle clip_rect, image_rect, r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3897
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3898 xgcv.clip_mask = s->img->mask;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3899 xgcv.clip_x_origin = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3900 xgcv.clip_y_origin = y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3901 xgcv.function = GXcopy;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3902 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
3903
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3904 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
3905 image_rect.x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3906 image_rect.y = y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3907 image_rect.width = s->img->width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3908 image_rect.height = s->img->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3909 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
3910 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
3911 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
3912 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3913 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3914 {
30653
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
3915 unsigned long mask = GCClipXOrigin | GCClipYOrigin | GCFunction;
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
3916 XGCValues xgcv;
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
3917 XRectangle clip_rect, image_rect, r;
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
3918
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
3919 x_get_glyph_string_clip_rect (s, &clip_rect);
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
3920 image_rect.x = x;
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
3921 image_rect.y = y;
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
3922 image_rect.width = s->img->width;
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
3923 image_rect.height = s->img->height;
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
3924 if (x_intersect_rectangles (&clip_rect, &image_rect, &r))
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
3925 XCopyArea (s->display, s->img->pixmap, s->window, s->gc,
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
3926 r.x - x, r.y - y, r.width, r.height, r.x, r.y);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3927
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3928 /* 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
3929 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
3930 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
3931 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
3932 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
3933 nothing here for mouse-face. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3934 if (s->hl == DRAW_CURSOR)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3935 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
3936 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
3937 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3938 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3939 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3940 /* 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
3941 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
3942 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
3943 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3944
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3945
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3946 /* 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
3947
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3948 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3949 x_draw_image_relief (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3950 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3951 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3952 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
3953 XRectangle r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3954 int x;
28785
796eafcfc070 (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 28686
diff changeset
3955 int y = s->ybase - image_ascent (s->img, s->face);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3956
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3957 /* 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
3958 right of that line. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3959 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
3960 && s->first_glyph->left_box_line_p)
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
3961 x = s->x + abs (s->face->box_line_width);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3962 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3963 x = s->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3964
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3965 /* 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
3966 by that margin. */
35276
008aea836cbc (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 35272
diff changeset
3967 x += s->img->hmargin;
008aea836cbc (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 35272
diff changeset
3968 y += s->img->vmargin;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3969
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3970 if (s->hl == DRAW_IMAGE_SUNKEN
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3971 || s->hl == DRAW_IMAGE_RAISED)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3972 {
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
3973 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
3974 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
3975 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3976 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3977 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3978 thick = abs (s->img->relief);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3979 raised_p = s->img->relief > 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3980 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3981
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3982 x0 = x - thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3983 y0 = y - thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3984 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
3985 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
3986
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3987 x_setup_relief_colors (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3988 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
3989 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
3990 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3992
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3993 /* 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
3994
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3995 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3996 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
3997 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3998 Pixmap pixmap;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3999 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4000 int x;
28785
796eafcfc070 (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 28686
diff changeset
4001 int y = s->ybase - s->y - image_ascent (s->img, s->face);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4002
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4003 /* 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
4004 right of that line. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4005 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
4006 && s->first_glyph->left_box_line_p)
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
4007 x = abs (s->face->box_line_width);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4008 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4009 x = 0;
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 /* 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
4012 by that margin. */
35276
008aea836cbc (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 35272
diff changeset
4013 x += s->img->hmargin;
008aea836cbc (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 35272
diff changeset
4014 y += s->img->vmargin;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4015
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4016 if (s->img->pixmap)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4017 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4018 if (s->img->mask)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4019 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4020 /* 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
4021 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
4022 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
4023 (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
4024 manually. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4025 unsigned long mask = (GCClipMask | GCClipXOrigin | GCClipYOrigin
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4026 | GCFunction);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4027 XGCValues xgcv;
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 xgcv.clip_mask = s->img->mask;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4030 xgcv.clip_x_origin = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4031 xgcv.clip_y_origin = y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4032 xgcv.function = GXcopy;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4033 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
4034
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4035 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
4036 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
4037 XSetClipMask (s->display, s->gc, None);
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 else
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 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
4042 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
4043
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4044 /* 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
4045 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
4046 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
4047 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
4048 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
4049 nothing here for mouse-face. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4050 if (s->hl == DRAW_CURSOR)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4051 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
4052 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
4053 }
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 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4056 /* 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
4057 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
4058 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
4059 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4060
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4061
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4062 /* 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
4063 give the rectangle to draw. */
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_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
4067 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4068 int x, y, w, h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4069 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4070 if (s->stippled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4071 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4072 /* Fill background with a stipple pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4073 XSetFillStyle (s->display, s->gc, FillOpaqueStippled);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4074 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
4075 XSetFillStyle (s->display, s->gc, FillSolid);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4076 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4077 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4078 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
4079 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4080
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4081
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4082 /* Draw image glyph string S.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4083
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4084 s->y
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4085 s->x +-------------------------
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4086 | s->face->box
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4087 |
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4088 | +-------------------------
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4089 | | s->img->margin
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4090 | |
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4091 | | +-------------------
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4092 | | | the image
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 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4097 x_draw_image_glyph_string (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4098 struct glyph_string *s;
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 int x, y;
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
4101 int box_line_hwidth = abs (s->face->box_line_width);
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
4102 int box_line_vwidth = max (s->face->box_line_width, 0);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4103 int height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4104 Pixmap pixmap = None;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4105
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
4106 height = s->height - 2 * box_line_vwidth;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4107
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4108 /* 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
4109 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
4110 flickering. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4111 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
4112 if (height > s->img->height
35276
008aea836cbc (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 35272
diff changeset
4113 || s->img->hmargin
008aea836cbc (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 35272
diff changeset
4114 || s->img->vmargin
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4115 || s->img->mask
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4116 || s->img->pixmap == 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4117 || s->width != s->background_width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4118 {
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
4119 if (box_line_hwidth && s->first_glyph->left_box_line_p)
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
4120 x = s->x + box_line_hwidth;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4121 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4122 x = s->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4123
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
4124 y = s->y + box_line_vwidth;
24991
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 if (s->img->mask)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4127 {
31694
97c48afc4c5a (x_draw_image_glyph_string): Remove a comment describing
Gerd Moellmann <gerd@gnu.org>
parents: 31614
diff changeset
4128 /* Create a pixmap as large as the glyph string. Fill it
97c48afc4c5a (x_draw_image_glyph_string): Remove a comment describing
Gerd Moellmann <gerd@gnu.org>
parents: 31614
diff changeset
4129 with the background color. Copy the image to it, using
97c48afc4c5a (x_draw_image_glyph_string): Remove a comment describing
Gerd Moellmann <gerd@gnu.org>
parents: 31614
diff changeset
4130 its mask. Copy the temporary pixmap to the display. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4131 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
4132 int depth = DefaultDepthOfScreen (screen);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4133
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4134 /* 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
4135 pixmap = XCreatePixmap (s->display, s->window,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4136 s->background_width,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4137 s->height, depth);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4138
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4139 /* 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
4140 pixmap. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4141 XSetClipMask (s->display, s->gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4142
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4143 /* 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
4144 if (s->stippled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4145 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4146 /* Fill background with a stipple pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4147 XSetFillStyle (s->display, s->gc, FillOpaqueStippled);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4148 XFillRectangle (s->display, pixmap, s->gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4149 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
4150 XSetFillStyle (s->display, s->gc, FillSolid);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4151 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4152 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4153 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4154 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4155 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
4156 &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4157 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
4158 XFillRectangle (s->display, pixmap, s->gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4159 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
4160 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
4161 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4162 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4163 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4164 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
4165
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4166 s->background_filled_p = 1;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4169 /* Draw the foreground. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4170 if (pixmap != None)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4171 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4172 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
4173 x_set_glyph_string_clipping (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4174 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
4175 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
4176 XFreePixmap (s->display, pixmap);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4177 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4178 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4179 x_draw_image_foreground (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4180
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4181 /* 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
4182 if (s->img->relief
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4183 || s->hl == DRAW_IMAGE_RAISED
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4184 || s->hl == DRAW_IMAGE_SUNKEN)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4185 x_draw_image_relief (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4186 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4187
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4188
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4189 /* Draw stretch glyph string S. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4190
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4191 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4192 x_draw_stretch_glyph_string (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4193 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4194 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4195 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
4196 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
4197
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4198 if (s->hl == DRAW_CURSOR
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4199 && !x_stretch_cursor_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4200 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4201 /* 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
4202 as wide as the stretch glyph. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4203 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
4204
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4205 /* Draw cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4206 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
4207
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4208 /* 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
4209 if (width < s->background_width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4210 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4211 GC gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4212 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
4213 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
4214 XRectangle r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4215
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4216 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
4217 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
4218
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4219 if (s->face->stipple)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4220 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4221 /* Fill background with a stipple pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4222 XSetFillStyle (s->display, gc, FillOpaqueStippled);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4223 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
4224 XSetFillStyle (s->display, gc, FillSolid);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4225 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4226 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4227 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4228 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4229 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
4230 XSetForeground (s->display, gc, xgcv.background);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4231 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
4232 XSetForeground (s->display, gc, xgcv.foreground);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4233 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4234 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4235 }
313
ac18f34e3e33 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 286
diff changeset
4236 else
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4237 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
4238 s->height);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4239
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4240 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4241 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4242
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4243
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4244 /* Draw glyph string S. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4245
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4246 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4247 x_draw_glyph_string (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4248 struct glyph_string *s;
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 /* 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
4251 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
4252 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
4253 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
4254 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4255 xassert (s->next->img == NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4256 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
4257 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
4258 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
4259 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4260
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4261 /* 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
4262 x_set_glyph_string_gc (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4263 x_set_glyph_string_clipping (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4264
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4265 switch (s->first_glyph->type)
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 case IMAGE_GLYPH:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4268 x_draw_image_glyph_string (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4269 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4270
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4271 case STRETCH_GLYPH:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4272 x_draw_stretch_glyph_string (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4273 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4274
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4275 case CHAR_GLYPH:
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4276 if (s->for_overlaps_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4277 s->background_filled_p = 1;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4278 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4279 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
4280 x_draw_glyph_string_foreground (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4281 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4282
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4283 case COMPOSITE_GLYPH:
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4284 if (s->for_overlaps_p || s->gidx > 0)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4285 s->background_filled_p = 1;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4286 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4287 x_draw_glyph_string_background (s, 1);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4288 x_draw_composite_glyph_string_foreground (s);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4289 break;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4290
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4291 default:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4292 abort ();
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
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4295 if (!s->for_overlaps_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4296 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4297 /* Draw underline. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4298 if (s->face->underline_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4299 {
32945
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4300 unsigned long tem, h;
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4301 int y;
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4302
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4303 /* Get the underline thickness. Default is 1 pixel. */
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4304 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
4305 h = 1;
32945
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4306
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4307 /* Get the underline position. This is the recommended
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4308 vertical offset in pixels from the baseline to the top of
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4309 the underline. This is a signed value according to the
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4310 specs, and its default is
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4311
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4312 ROUND ((maximum descent) / 2), with
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4313 ROUND(x) = floor (x + 0.5) */
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4314
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4315 if (XGetFontProperty (s->font, XA_UNDERLINE_POSITION, &tem))
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4316 y = s->ybase + (long) tem;
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4317 else if (s->face->font)
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4318 y = s->ybase + (s->face->font->max_bounds.descent + 1) / 2;
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4319 else
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4320 y = s->height - h;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4321
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4322 if (s->face->underline_defaulted_p)
32945
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4323 XFillRectangle (s->display, s->window, s->gc,
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4324 s->x, y, s->width, h);
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4325 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4326 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4327 XGCValues xgcv;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4328 XGetGCValues (s->display, s->gc, GCForeground, &xgcv);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4329 XSetForeground (s->display, s->gc, s->face->underline_color);
32945
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4330 XFillRectangle (s->display, s->window, s->gc,
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4331 s->x, y, s->width, h);
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4332 XSetForeground (s->display, s->gc, xgcv.foreground);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4333 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4334 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4335
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4336 /* Draw overline. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4337 if (s->face->overline_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4338 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4339 unsigned long dy = 0, h = 1;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4340
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4341 if (s->face->overline_color_defaulted_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4342 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
4343 s->width, h);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4344 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4345 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4346 XGCValues xgcv;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4347 XGetGCValues (s->display, s->gc, GCForeground, &xgcv);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4348 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
4349 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
4350 s->width, h);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4351 XSetForeground (s->display, s->gc, xgcv.foreground);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4352 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4353 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4354
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4355 /* Draw strike-through. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4356 if (s->face->strike_through_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4357 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4358 unsigned long h = 1;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4359 unsigned long dy = (s->height - h) / 2;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4360
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4361 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
4362 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
4363 s->width, h);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4364 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4365 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4366 XGCValues xgcv;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4367 XGetGCValues (s->display, s->gc, GCForeground, &xgcv);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4368 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
4369 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
4370 s->width, h);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4371 XSetForeground (s->display, s->gc, xgcv.foreground);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4372 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4373 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4374
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4375 /* Draw relief. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4376 if (s->face->box != FACE_NO_BOX)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4377 x_draw_glyph_string_box (s);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4378 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4379
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4380 /* Reset clipping. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4381 XSetClipMask (s->display, s->gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4382 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4383
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4384
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4385 static int x_fill_composite_glyph_string P_ ((struct glyph_string *,
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4386 struct face **, int));
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4387
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4388
30137
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4389 /* Fill glyph string S with composition components specified by S->cmp.
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4390
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4391 FACES is an array of faces for all components of this composition.
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4392 S->gidx is the index of the first component for S.
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4393 OVERLAPS_P non-zero means S should draw the foreground only, and
30137
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4394 use its physical height for clipping.
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4395
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4396 Value is the index of a component not in S. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4397
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4398 static int
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4399 x_fill_composite_glyph_string (s, faces, overlaps_p)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4400 struct glyph_string *s;
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4401 struct face **faces;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4402 int overlaps_p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4403 {
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4404 int i;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4405
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4406 xassert (s);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4407
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4408 s->for_overlaps_p = overlaps_p;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4409
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4410 s->face = faces[s->gidx];
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4411 s->font = s->face->font;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4412 s->font_info = FONT_INFO_FROM_ID (s->f, s->face->font_info_id);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4413
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4414 /* For all glyphs of this composition, starting at the offset
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4415 S->gidx, until we reach the end of the definition or encounter a
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4416 glyph that requires the different face, add it to S. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4417 ++s->nchars;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4418 for (i = s->gidx + 1; i < s->cmp->glyph_len && faces[i] == s->face; ++i)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4419 ++s->nchars;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4420
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4421 /* All glyph strings for the same composition has the same width,
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4422 i.e. the width set for the first component of the composition. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4423
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4424 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
4425
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4426 /* 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
4427 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
4428 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
4429 characters of the glyph string. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4430 if (s->font == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4431 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4432 s->font_not_found_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4433 s->font = FRAME_FONT (s->f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4434 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4435
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4436 /* 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
4437 s->ybase += s->first_glyph->voffset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4438
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4439 xassert (s->face && s->face->gc);
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 /* 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
4442 s->two_byte_p = 1;
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4443
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4444 return s->gidx + s->nchars;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4445 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4446
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4447
30137
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4448 /* Fill glyph string S from a sequence of character glyphs.
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4449
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4450 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
4451 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
4452 OVERLAPS_P non-zero means S should draw the foreground only, and
30137
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4453 use its physical height for clipping.
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4454
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4455 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
4456
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4457 static int
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4458 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
4459 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4460 int face_id;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4461 int start, end, overlaps_p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4462 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4463 struct glyph *glyph, *last;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4464 int voffset;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4465 int glyph_not_available_p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4466
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4467 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
4468 xassert (s->nchars == 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4469 xassert (start >= 0 && end > start);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4470
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4471 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
4472 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
4473 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
4474 voffset = glyph->voffset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4475
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4476 glyph_not_available_p = glyph->glyph_not_available_p;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4477
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4478 while (glyph < last
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4479 && glyph->type == CHAR_GLYPH
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4480 && glyph->voffset == voffset
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4481 /* Same face id implies same font, nowadays. */
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4482 && glyph->face_id == face_id
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4483 && glyph->glyph_not_available_p == glyph_not_available_p)
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4484 {
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4485 int two_byte_p;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4486
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4487 s->face = x_get_glyph_face_and_encoding (s->f, glyph,
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4488 s->char2b + s->nchars,
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4489 &two_byte_p);
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4490 s->two_byte_p = two_byte_p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4491 ++s->nchars;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4492 xassert (s->nchars <= end - start);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4493 s->width += glyph->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4494 ++glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4495 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4496
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4497 s->font = s->face->font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4498 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
4499
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4500 /* 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
4501 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
4502 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
4503 characters of the glyph string. */
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4504 if (s->font == NULL || glyph_not_available_p)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4505 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4506 s->font_not_found_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4507 s->font = FRAME_FONT (s->f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4508 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4509
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4510 /* 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
4511 s->ybase += voffset;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4512
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4513 xassert (s->face && s->face->gc);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4514 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
4515 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4516
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4517
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4518 /* 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
4519
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4520 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4521 x_fill_image_glyph_string (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4522 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4523 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4524 xassert (s->first_glyph->type == IMAGE_GLYPH);
27000
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
4525 s->img = IMAGE_FROM_ID (s->f, s->first_glyph->u.img_id);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4526 xassert (s->img);
27000
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
4527 s->face = FACE_FROM_ID (s->f, s->first_glyph->face_id);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4528 s->font = s->face->font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4529 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
4530
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4531 /* 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
4532 s->ybase += s->first_glyph->voffset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4533 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4534
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4535
30137
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4536 /* Fill glyph string S from a sequence of stretch glyphs.
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4537
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4538 ROW is the glyph row in which the glyphs are found, AREA is the
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4539 area within the row. START is the index of the first glyph to
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4540 consider, END is the index of the last + 1.
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4541
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4542 Value is the index of the first glyph not in S. */
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4543
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4544 static int
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4545 x_fill_stretch_glyph_string (s, row, area, start, end)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4546 struct glyph_string *s;
30137
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4547 struct glyph_row *row;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4548 enum glyph_row_area area;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4549 int start, end;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4550 {
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4551 struct glyph *glyph, *last;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4552 int voffset, face_id;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4553
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4554 xassert (s->first_glyph->type == STRETCH_GLYPH);
30137
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4555
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4556 glyph = s->row->glyphs[s->area] + start;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4557 last = s->row->glyphs[s->area] + end;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4558 face_id = glyph->face_id;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4559 s->face = FACE_FROM_ID (s->f, face_id);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4560 s->font = s->face->font;
30137
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4561 s->font_info = FONT_INFO_FROM_ID (s->f, s->face->font_info_id);
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4562 s->width = glyph->pixel_width;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4563 voffset = glyph->voffset;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4564
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4565 for (++glyph;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4566 (glyph < last
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4567 && glyph->type == STRETCH_GLYPH
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4568 && glyph->voffset == voffset
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4569 && glyph->face_id == face_id);
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4570 ++glyph)
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4571 s->width += glyph->pixel_width;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4572
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4573 /* Adjust base line for subscript/superscript text. */
30137
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4574 s->ybase += voffset;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4575
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4576 xassert (s->face && s->face->gc);
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4577 return glyph - s->row->glyphs[s->area];
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4578 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4579
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4580
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4581 /* 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
4582 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
4583 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
4584 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
4585 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
4586 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
4587 face-override for drawing S. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4588
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4589 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4590 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
4591 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4592 XChar2b *char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4593 struct window *w;
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 enum glyph_row_area area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4596 int start;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4597 enum draw_glyphs_face hl;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4598 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4599 bzero (s, sizeof *s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4600 s->w = w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4601 s->f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4602 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
4603 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
4604 s->char2b = char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4605 s->hl = hl;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4606 s->row = row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4607 s->area = area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4608 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
4609 s->height = row->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4610 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
4611
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
4612 /* 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
4613 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
4614 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
4615
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4616 s->ybase = s->y + row->ascent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4617 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4618
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4619
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4620 /* 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
4621 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
4622 in the drawing area. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4623
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4624 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4625 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
4626 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4627 int start;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4628 int last_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4629 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4630 /* 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
4631 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
4632 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
4633
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4634 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
4635 && s->hl == DRAW_NORMAL_TEXT
36117
776ddfaf7665 (x_set_glyph_string_background_width): Extend the
Gerd Moellmann <gerd@gnu.org>
parents: 36116
diff changeset
4636 && s->area == TEXT_AREA
776ddfaf7665 (x_set_glyph_string_background_width): Extend the
Gerd Moellmann <gerd@gnu.org>
parents: 36116
diff changeset
4637 && (s->row->fill_line_p
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4638 || s->face->background != default_face->background
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4639 || s->face->stipple != default_face->stipple))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4640 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
4641
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4642 /* 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
4643 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
4644 area. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4645 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
4646 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
4647 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4648 s->background_width = s->width;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4651
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4652 /* 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
4653 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
4654 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
4655 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
4656 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
4657 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
4658 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
4659
25692
121bd925411f Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents: 25682
diff changeset
4660 /* 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
4661 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
4662 #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
4663 do \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4664 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4665 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
4666 x_init_glyph_string (s, NULL, W, ROW, AREA, START, HL); \
30137
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4667 START = x_fill_stretch_glyph_string (s, ROW, AREA, START, END); \
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4668 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
4669 s->x = (X); \
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 while (0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4672
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4673
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4674 /* 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
4675 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
4676 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
4677 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
4678 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
4679 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
4680 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
4681
25692
121bd925411f Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents: 25682
diff changeset
4682 #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
4683 do \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4684 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4685 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
4686 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
4687 x_fill_image_glyph_string (s); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4688 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
4689 ++START; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4690 s->x = (X); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4691 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4692 while (0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4693
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 /* 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
4696 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
4697 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
4698 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
4699 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
4700 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
4701 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
4702 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
4703
25692
121bd925411f Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents: 25682
diff changeset
4704 #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
4705 do \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4706 { \
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
4707 int c, face_id; \
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4708 XChar2b *char2b; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4709 \
27000
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
4710 c = (ROW)->glyphs[AREA][START].u.ch; \
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
4711 face_id = (ROW)->glyphs[AREA][START].face_id; \
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4712 \
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4713 s = (struct glyph_string *) alloca (sizeof *s); \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4714 char2b = (XChar2b *) alloca ((END - START) * sizeof *char2b); \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4715 x_init_glyph_string (s, char2b, W, ROW, AREA, START, HL); \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4716 x_append_glyph_string (&HEAD, &TAIL, s); \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4717 s->x = (X); \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4718 START = x_fill_glyph_string (s, face_id, START, END, \
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4719 OVERLAPS_P); \
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4720 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4721 while (0)
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
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4724 /* Add a glyph string for a composite sequence to the list of strings
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4725 between HEAD and TAIL. START is the index of the first glyph in
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4726 row area AREA of glyph row ROW that is part of the new glyph
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4727 string. END is the index of the last glyph in that glyph row area.
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4728 X is the current output position assigned to the new glyph string
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4729 constructed. HL overrides that face of the glyph; e.g. it is
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4730 DRAW_CURSOR if a cursor has to be drawn. LAST_X is the right-most
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4731 x-position of the drawing area. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4732
26912
3470e4fea708 (BUILD_GLYPH_STRINGS): For pcc, remove continuation in arg list.
Dave Love <fx@gnu.org>
parents: 26879
diff changeset
4733 #define BUILD_COMPOSITE_GLYPH_STRING(W, ROW, AREA, START, END, HEAD, TAIL, HL, X, LAST_X, OVERLAPS_P) \
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4734 do { \
27000
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
4735 int cmp_id = (ROW)->glyphs[AREA][START].u.cmp_id; \
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
4736 int face_id = (ROW)->glyphs[AREA][START].face_id; \
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4737 struct face *base_face = FACE_FROM_ID (XFRAME (w->frame), face_id); \
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4738 struct composition *cmp = composition_table[cmp_id]; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4739 int glyph_len = cmp->glyph_len; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4740 XChar2b *char2b; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4741 struct face **faces; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4742 struct glyph_string *first_s = NULL; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4743 int n; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4744 \
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4745 base_face = base_face->ascii_face; \
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4746 char2b = (XChar2b *) alloca ((sizeof *char2b) * glyph_len); \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4747 faces = (struct face **) alloca ((sizeof *faces) * glyph_len); \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4748 /* At first, fill in `char2b' and `faces'. */ \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4749 for (n = 0; n < glyph_len; n++) \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4750 { \
27000
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
4751 int c = COMPOSITION_GLYPH (cmp, n); \
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4752 int this_face_id = FACE_FOR_CHAR (XFRAME (w->frame), base_face, c); \
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4753 faces[n] = FACE_FROM_ID (XFRAME (w->frame), this_face_id); \
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4754 x_get_char_face_and_encoding (XFRAME (w->frame), c, \
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4755 this_face_id, char2b + n, 1); \
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4756 } \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4757 \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4758 /* Make glyph_strings for each glyph sequence that is drawable by \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4759 the same face, and append them to HEAD/TAIL. */ \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4760 for (n = 0; n < cmp->glyph_len;) \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4761 { \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4762 s = (struct glyph_string *) alloca (sizeof *s); \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4763 x_init_glyph_string (s, char2b + n, W, ROW, AREA, START, HL); \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4764 x_append_glyph_string (&(HEAD), &(TAIL), s); \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4765 s->cmp = cmp; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4766 s->gidx = n; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4767 s->x = (X); \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4768 \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4769 if (n == 0) \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4770 first_s = s; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4771 \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4772 n = x_fill_composite_glyph_string (s, faces, OVERLAPS_P); \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4773 } \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4774 \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4775 ++START; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4776 s = first_s; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4777 } while (0)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4778
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4779
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4780 /* 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
4781 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
4782 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
4783 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
4784 x-positions of the drawing area.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4785
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4786 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
4787 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
4788 asynchronously). */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4789
25692
121bd925411f Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents: 25682
diff changeset
4790 #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
4791 do \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4792 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4793 HEAD = TAIL = NULL; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4794 while (START < END) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4795 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4796 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
4797 switch (first_glyph->type) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4798 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4799 case CHAR_GLYPH: \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4800 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
4801 TAIL, HL, X, LAST_X, \
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4802 OVERLAPS_P); \
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4803 break; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4804 \
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4805 case COMPOSITE_GLYPH: \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4806 BUILD_COMPOSITE_GLYPH_STRING (W, ROW, AREA, START, END, \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4807 HEAD, TAIL, HL, X, LAST_X,\
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4808 OVERLAPS_P); \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4809 break; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4810 \
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4811 case STRETCH_GLYPH: \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4812 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
4813 HEAD, TAIL, HL, X, LAST_X); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4814 break; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4815 \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4816 case IMAGE_GLYPH: \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4817 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
4818 TAIL, HL, X, LAST_X); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4819 break; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4820 \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4821 default: \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4822 abort (); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4823 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4824 \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4825 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
4826 (X) += s->width; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4827 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4828 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4829 while (0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4830
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4831
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4832 /* 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
4833 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
4834 face-override with the following meaning:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4835
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4836 DRAW_NORMAL_TEXT draw normally
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4837 DRAW_CURSOR draw in cursor face
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4838 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
4839 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
4840 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
4841 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
4842
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4843 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
4844 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
4845 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
4846 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
4847 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
4848
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4849 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
4850 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
4851
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4852 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
4853
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4854 static int
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4855 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
4856 overlaps_p)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4857 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4858 int x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4859 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4860 enum glyph_row_area area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4861 int start, end;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4862 enum draw_glyphs_face hl;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4863 int *real_start, *real_end;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4864 int overlaps_p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4865 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4866 struct glyph_string *head, *tail;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4867 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4868 int last_x, area_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4869 int x_reached;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4870 int i, j;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4871
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4872 /* Let's rather be paranoid than getting a SEGV. */
31489
8bfcf0b562f2 (x_draw_glyphs): Handle case START and END are out
Gerd Moellmann <gerd@gnu.org>
parents: 31340
diff changeset
4873 end = min (end, row->used[area]);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4874 start = max (0, start);
31489
8bfcf0b562f2 (x_draw_glyphs): Handle case START and END are out
Gerd Moellmann <gerd@gnu.org>
parents: 31340
diff changeset
4875 start = min (end, start);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4876 if (real_start)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4877 *real_start = start;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4878 if (real_end)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4879 *real_end = end;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4880
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4881 /* 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
4882 end of the drawing area. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4883 if (row->full_width_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4884 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4885 /* 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
4886 or flag areas. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4887 struct frame *f = XFRAME (w->frame);
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
4888 /* 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
4889 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
4890
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4891 x += window_left_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4892 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
4893 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
4894
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4895 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
4896 {
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
4897 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
4898 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
4899 last_x += width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4900 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4901 x -= width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4902 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4903
25083
d3b7d7d2bca8 (x_setup_relief_color): Don't try smart color allocation
Gerd Moellmann <gerd@gnu.org>
parents: 25079
diff changeset
4904 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
4905 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
4906 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4907 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4908 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4909 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
4910 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
4911 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
4912 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4913
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4914 /* 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
4915 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
4916 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
4917 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
4918 i = start;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4919 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
4920 overlaps_p);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4921 if (tail)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4922 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
4923 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4924 x_reached = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4925
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4926 /* 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
4927 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
4928 strings built above. */
31489
8bfcf0b562f2 (x_draw_glyphs): Handle case START and END are out
Gerd Moellmann <gerd@gnu.org>
parents: 31340
diff changeset
4929 if (head && !overlaps_p && row->contains_overlapping_glyphs_p)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4930 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4931 int dummy_x = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4932 struct glyph_string *h, *t;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4933
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4934 /* Compute overhangs for all glyph strings. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4935 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
4936 x_compute_glyph_string_overhangs (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4937
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4938 /* 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
4939 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
4940 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
4941 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
4942 draws over it. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4943 i = x_left_overwritten (head);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4944 if (i >= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4945 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4946 j = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4947 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
4948 DRAW_NORMAL_TEXT, dummy_x, last_x,
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4949 overlaps_p);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4950 start = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4951 if (real_start)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4952 *real_start = start;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4953 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
4954 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
4955 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4956
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4957 /* 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
4958 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
4959 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
4960 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
4961 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
4962 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
4963 strings exist. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4964 i = x_left_overwriting (head);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4965 if (i >= 0)
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 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
4968 DRAW_NORMAL_TEXT, dummy_x, last_x,
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4969 overlaps_p);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4970 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
4971 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4972 if (real_start)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4973 *real_start = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4974 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
4975 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
4976 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4977
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4978 /* 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
4979 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
4980 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
4981 over it. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4982 i = x_right_overwritten (tail);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4983 if (i >= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4984 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4985 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
4986 DRAW_NORMAL_TEXT, x, last_x,
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4987 overlaps_p);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4988 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
4989 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
4990 if (real_end)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4991 *real_end = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4992 }
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 /* 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
4995 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
4996 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
4997 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
4998 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
4999 i = x_right_overwriting (tail);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5000 if (i >= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5001 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5002 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
5003 DRAW_NORMAL_TEXT, x, last_x,
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5004 overlaps_p);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5005 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
5006 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5007 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
5008 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
5009 if (real_end)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5010 *real_end = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5011 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5012 }
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 /* Draw all strings. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5015 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
5016 x_draw_glyph_string (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5017
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5018 /* 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
5019 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
5020 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
5021 if (!row->full_width_p)
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 if (area > LEFT_MARGIN_AREA)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5024 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
5025 if (area > TEXT_AREA)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5026 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
5027 }
31489
8bfcf0b562f2 (x_draw_glyphs): Handle case START and END are out
Gerd Moellmann <gerd@gnu.org>
parents: 31340
diff changeset
5028
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5029 return x_reached;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5030 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5031
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5032
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5033 /* 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
5034
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5035 static void
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5036 x_fix_overlapping_area (w, row, area)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5037 struct window *w;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5038 struct glyph_row *row;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5039 enum glyph_row_area area;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5040 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5041 int i, x;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5042
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5043 BLOCK_INPUT;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5044
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5045 if (area == LEFT_MARGIN_AREA)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5046 x = 0;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5047 else if (area == TEXT_AREA)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5048 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
5049 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5050 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
5051 + window_box_width (w, TEXT_AREA));
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5052
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5053 for (i = 0; i < row->used[area];)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5054 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5055 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
5056 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5057 int start = i, start_x = x;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5058
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5059 do
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5060 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5061 x += row->glyphs[area][i].pixel_width;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5062 ++i;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5063 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5064 while (i < row->used[area]
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5065 && row->glyphs[area][i].overlaps_vertically_p);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5066
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5067 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
5068 (row->inverse_p
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5069 ? DRAW_INVERSE_VIDEO : DRAW_NORMAL_TEXT),
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5070 NULL, NULL, 1);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5071 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5072 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5073 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5074 x += row->glyphs[area][i].pixel_width;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5075 ++i;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5076 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5077 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5078
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5079 UNBLOCK_INPUT;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5080 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5081
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5082
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5083 /* 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
5084 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
5085 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
5086 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
5087 row being updated. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5088
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5089 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5090 x_write_glyphs (start, len)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5091 struct glyph *start;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5092 int len;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5093 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5094 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
5095
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5096 xassert (updated_window && updated_row);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5097 BLOCK_INPUT;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5098
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5099 /* Write glyphs. */
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 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
5102 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
5103 updated_row, updated_area,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5104 hpos, hpos + len,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5105 (updated_row->inverse_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5106 ? DRAW_INVERSE_VIDEO : DRAW_NORMAL_TEXT),
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5107 &real_start, &real_end, 0);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5108
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5109 /* 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
5110 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
5111 real_end - real_start);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5112
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5113 UNBLOCK_INPUT;
24991
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 /* Advance the output cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5116 output_cursor.hpos += len;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5117 output_cursor.x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5118 }
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 /* 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
5122
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5123 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5124 x_insert_glyphs (start, len)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5125 struct glyph *start;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5126 register int len;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5127 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5128 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5129 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5130 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
5131 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5132 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5133 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
5134
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5135 xassert (updated_window && updated_row);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5136 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5137 w = updated_window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5138 f = XFRAME (WINDOW_FRAME (w));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5139
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5140 /* 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
5141 row = updated_row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5142 line_height = row->height;
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 /* 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
5145 shift_by_width = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5146 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
5147 shift_by_width += glyph->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5148
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5149 /* 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
5150 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
5151 - output_cursor.x
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5152 - shift_by_width);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5153
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5154 /* Shift right. */
36116
68c02499d990 (x_insert_glyphs): Call window_box_left to obtain
Gerd Moellmann <gerd@gnu.org>
parents: 36005
diff changeset
5155 frame_x = window_box_left (w, updated_area) + output_cursor.x;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5156 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
5157 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
5158 f->output_data.x->normal_gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5159 frame_x, frame_y,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5160 shifted_region_width, line_height,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5161 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
5162
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5163 /* Write the glyphs. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5164 hpos = start - row->glyphs[updated_area];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5165 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
5166 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
5167 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
5168
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5169 /* Advance the output cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5170 output_cursor.hpos += len;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5171 output_cursor.x += shift_by_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5172 UNBLOCK_INPUT;
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
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 /* 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
5177 for X frames. */
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 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5180 x_delete_glyphs (n)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5181 register int n;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5182 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5183 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5184 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5185
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5186
35581
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5187 /* Like XClearArea, but check that WIDTH and HEIGHT are reasonable.
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5188 If they are <= 0, this is probably an error. */
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5189
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5190 void
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5191 x_clear_area (dpy, window, x, y, width, height, exposures)
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5192 Display *dpy;
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5193 Window window;
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5194 int x, y;
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5195 int width, height;
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5196 int exposures;
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5197 {
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5198 xassert (width > 0 && height > 0);
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5199 XClearArea (dpy, window, x, y, width, height, exposures);
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5200 }
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5201
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5202
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5203 /* 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
5204 (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
5205 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
5206
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5207 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
5208 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
5209
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5210 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5211 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
5212 int to_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5213 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5214 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5215 struct window *w = updated_window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5216 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
5217 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
5218
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5219 xassert (updated_window && updated_row);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5220 f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5221
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5222 if (updated_row->full_width_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5223 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5224 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
5225 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
5226 && !w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5227 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
5228 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5229 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5230 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
5231 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
5232
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5233 /* 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
5234 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
5235 if (to_x == 0)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5236 return;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5237 else if (to_x < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5238 to_x = max_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5239 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5240 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
5241
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5242 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
5243
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
5244 /* 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
5245 if (!updated_row->full_width_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5246 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
5247
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5248 from_x = output_cursor.x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5249
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5250 /* Translate to frame coordinates. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5251 if (updated_row->full_width_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5252 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5253 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
5254 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
5255 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5256 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5257 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5258 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
5259 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
5260 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5261
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
5262 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
5263 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
5264 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
5265
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5266 /* 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
5267 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
5268 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5269 BLOCK_INPUT;
35581
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5270 x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5271 from_x, from_y, to_x - from_x, to_y - from_y,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5272 False);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5273 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5274 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5275 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5276
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5277
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5278 /* 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
5279 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
5280
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5281 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5282 x_clear_frame ()
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 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5285
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5286 if (updating_frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5287 f = updating_frame;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5288 else
25682
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5289 f = SELECTED_FRAME ();
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5290
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5291 /* 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
5292 longer visible. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5293 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
5294 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
5295 output_cursor.x = -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5296
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5297 /* 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
5298 follow an explicit cursor_to. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5299 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
5300 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
5301
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5302 /* 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
5303 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
5304 x_scroll_bar_clear (f);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5305
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
5306 XFlush (FRAME_X_DISPLAY (f));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5307 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5308 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5309
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5310
6791
7036e4fd549f (dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents: 6767
diff changeset
5311
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5312 /* 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
5313
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5314 /* 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
5315 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
5316
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5317 #if defined (HAVE_TIMEVAL) && defined (HAVE_SELECT)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5318
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5319
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5320 /* 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
5321 *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
5322
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5323 static int
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5324 timeval_subtract (result, x, y)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5325 struct timeval *result, x, y;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5326 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5327 /* 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
5328 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
5329 if (x.tv_usec < y.tv_usec)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5330 {
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5331 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
5332 y.tv_usec -= 1000000 * nsec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5333 y.tv_sec += nsec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5334 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5335
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5336 if (x.tv_usec - y.tv_usec > 1000000)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5337 {
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5338 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
5339 y.tv_usec += 1000000 * nsec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5340 y.tv_sec -= nsec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5341 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5342
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5343 /* 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
5344 positive. */
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5345 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
5346 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
5347
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5348 /* 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
5349 negative. */
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5350 return x.tv_sec < y.tv_sec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5351 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5352
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
5353 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5354 XTflash (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5355 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5356 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5357 BLOCK_INPUT;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5358
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5359 {
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5360 GC gc;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5361
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5362 /* 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
5363 pixels into background pixels. */
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5364 {
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5365 XGCValues values;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5366
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5367 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
5368 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
5369 ^ f->output_data.x->background_pixel);
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
5370
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
5371 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
5372 GCFunction | GCForeground, &values);
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5373 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5374
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5375 {
16352
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5376 /* 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
5377 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
5378 /* 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
5379 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
5380 /* 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
5381 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
5382 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
5383
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5384 int width;
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5385
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5386 /* 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
5387 edge it is next to. */
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5388 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
5389 {
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5390 case vertical_scroll_bar_left:
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5391 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
5392 break;
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5393
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5394 case vertical_scroll_bar_right:
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5395 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
5396 break;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5397
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5398 default:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5399 break;
16352
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5400 }
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5401
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5402 width = flash_right - flash_left;
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5403
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5404 /* 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
5405 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
5406 {
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5407 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
5408 flash_left,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5409 (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
5410 + 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
5411 width, flash_height);
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5412 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
5413 flash_left,
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5414 (height - flash_height
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5415 - FRAME_INTERNAL_BORDER_WIDTH (f)),
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5416 width, flash_height);
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5417 }
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5418 else
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5419 /* 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
5420 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
5421 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
5422 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
5423
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5424 x_flush (f);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5425
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5426 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5427 struct timeval wakeup;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5428
5362
d1fa597d923d (XTflush): FIx typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 5357
diff changeset
5429 EMACS_GET_TIME (wakeup);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5430
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5431 /* 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
5432 wakeup.tv_usec += 150000;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5433 wakeup.tv_sec += (wakeup.tv_usec / 1000000);
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5434 wakeup.tv_usec %= 1000000;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5435
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5436 /* Keep waiting until past the time wakeup. */
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5437 while (1)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5438 {
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5439 struct timeval timeout;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5440
5362
d1fa597d923d (XTflush): FIx typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 5357
diff changeset
5441 EMACS_GET_TIME (timeout);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5442
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5443 /* In effect, timeout = wakeup - timeout.
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5444 Break if result would be negative. */
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5445 if (timeval_subtract (&timeout, wakeup, timeout))
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5446 break;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5447
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5448 /* 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
5449 select (0, NULL, NULL, NULL, &timeout);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5450 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5451 }
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
5452
16352
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5453 /* 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
5454 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
5455 {
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5456 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
5457 flash_left,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5458 (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
5459 + 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
5460 width, flash_height);
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5461 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
5462 flash_left,
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5463 (height - flash_height
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5464 - FRAME_INTERNAL_BORDER_WIDTH (f)),
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5465 width, flash_height);
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5466 }
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5467 else
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5468 /* 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
5469 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
5470 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
5471 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
5472
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
5473 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
5474 x_flush (f);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5475 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5476 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5477
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5478 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5479 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5480
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5481 #endif /* defined (HAVE_TIMEVAL) && defined (HAVE_SELECT) */
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5482
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5483
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5484 /* Make audible bell. */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5485
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
5486 void
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5487 XTring_bell ()
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5488 {
25682
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5489 struct frame *f = SELECTED_FRAME ();
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5490
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5491 if (FRAME_X_DISPLAY (f))
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5492 {
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5493 #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
5494 if (visible_bell)
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5495 XTflash (f);
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5496 else
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5497 #endif
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5498 {
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5499 BLOCK_INPUT;
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5500 XBell (FRAME_X_DISPLAY (f), 0);
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5501 XFlush (FRAME_X_DISPLAY (f));
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5502 UNBLOCK_INPUT;
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5503 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5504 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5505 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5506
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5507
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5508 /* Specify how many text lines, from the top of the window,
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5509 should be affected by insert-lines and delete-lines operations.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5510 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
5511 that is bounded by calls to x_update_begin and x_update_end. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5512
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
5513 static void
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5514 XTset_terminal_window (n)
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5515 register int n;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5516 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5517 /* This function intentionally left blank. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5518 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5519
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5520
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5521
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5522 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5523 Line Dance
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5524 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5525
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5526 /* 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
5527 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
5528
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5529 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5530 x_ins_del_lines (vpos, n)
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
5531 int vpos, n;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5532 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5533 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5534 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5535
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5536
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5537 /* 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
5538
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5539 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5540 x_scroll_run (w, run)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5541 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5542 struct run *run;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5543 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5544 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5545 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
5546
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5547 /* 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
5548 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
5549 left and right of W. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5550 window_box (w, -1, &x, &y, &width, &height);
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
5551 width += FRAME_X_FLAGS_AREA_WIDTH (f);
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
5552 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
5553
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5554 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
5555 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
5556 bottom_y = y + height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5557
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5558 if (to_y < from_y)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5559 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5560 /* 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
5561 line at the bottom. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5562 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
5563 height = bottom_y - from_y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5564 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5565 height = run->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5566 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5567 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5568 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5569 /* 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
5570 at the bottom. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5571 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
5572 height = bottom_y - to_y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5573 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5574 height = run->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5575 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5576
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5577 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5578
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5579 /* 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
5580 updated_window = w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5581 x_clear_cursor (w);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5582
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5583 XCopyArea (FRAME_X_DISPLAY (f),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5584 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
5585 f->output_data.x->normal_gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5586 x, from_y,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5587 width, height,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5588 x, to_y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5589
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5590 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5591 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5592
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5593
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5594
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5595 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5596 Exposure Events
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5597 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5598
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5599 /* 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
5600 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
5601 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
5602 the entire frame. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5603
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5604 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5605 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
5606 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5607 int x, y, w, h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5608 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5609 XRectangle r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5610
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5611 TRACE ((stderr, "expose_frame "));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5612
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5613 /* 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
5614 if (FRAME_GARBAGED_P (f))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5615 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5616 TRACE ((stderr, " garbaged\n"));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5617 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5618 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5619
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5620 /* 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
5621 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
5622 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
5623 if (FRAME_FACE_CACHE (f) == NULL
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5624 || 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
5625 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5626 TRACE ((stderr, " no faces\n"));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5627 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5628 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5629
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5630 if (w == 0 || h == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5631 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5632 r.x = r.y = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5633 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
5634 r.height = CANON_Y_UNIT (f) * f->height;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5635 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5636 else
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5637 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5638 r.x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5639 r.y = y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5640 r.width = w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5641 r.height = h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5642 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5643
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5644 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
5645 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
5646
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
5647 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
5648 {
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
5649 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
5650 XRectangle window_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5651 XRectangle intersection_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5652 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
5653
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5654
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5655 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
5656 window_rect.x = window_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5657 window_rect.y = window_y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5658 window_rect.width = window_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5659 window_rect.height = window_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5660
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5661 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
5662 expose_window (w, &intersection_rect);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5663 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5664
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5665 #ifndef USE_X_TOOLKIT
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5666 if (WINDOWP (f->menu_bar_window))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5667 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5668 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
5669 XRectangle window_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5670 XRectangle intersection_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5671 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
5672
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5673
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5674 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
5675 window_rect.x = window_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5676 window_rect.y = window_y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5677 window_rect.width = window_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5678 window_rect.height = window_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5679
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5680 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
5681 expose_window (w, &intersection_rect);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5682 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5683 #endif /* not USE_X_TOOLKIT */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5684 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5685
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5686
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5687 /* 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
5688 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
5689
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5690 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5691 expose_window_tree (w, r)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5692 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5693 XRectangle *r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5694 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5695 while (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5696 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5697 if (!NILP (w->hchild))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5698 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
5699 else if (!NILP (w->vchild))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5700 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
5701 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5702 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5703 XRectangle window_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5704 XRectangle intersection_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5705 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5706 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
5707
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5708 /* Frame-relative pixel rectangle of W. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5709 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
5710 &window_height);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5711 window_rect.x
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5712 = (window_x
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
5713 - 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
5714 - 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
5715 window_rect.y = window_y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5716 window_rect.width
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5717 = (window_width
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
5718 + 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
5719 + 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
5720 window_rect.height
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5721 = 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
5722
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5723 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
5724 expose_window (w, &intersection_rect);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5725 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5726
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5727 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
5728 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5729 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5730
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5731
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5732 /* 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
5733 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
5734
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5735 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5736 expose_area (w, row, r, area)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5737 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5738 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5739 XRectangle *r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5740 enum glyph_row_area area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5741 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5742 struct glyph *first = row->glyphs[area];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5743 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
5744 struct glyph *last;
34181
8f8830861b15 (expose_area): Pass x-coordinate relative to the exposed
Gerd Moellmann <gerd@gnu.org>
parents: 34159
diff changeset
5745 int first_x, start_x, x;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5746
25306
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5747 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
5748 /* If row extends face to end of line write the whole line. */
34181
8f8830861b15 (expose_area): Pass x-coordinate relative to the exposed
Gerd Moellmann <gerd@gnu.org>
parents: 34159
diff changeset
5749 x_draw_glyphs (w, 0, row, area,
25306
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5750 0, row->used[area],
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5751 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
5752 NULL, NULL, 0);
25306
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5753 else
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5754 {
34181
8f8830861b15 (expose_area): Pass x-coordinate relative to the exposed
Gerd Moellmann <gerd@gnu.org>
parents: 34159
diff changeset
5755 /* Set START_X to the window-relative start position for drawing glyphs of
8f8830861b15 (expose_area): Pass x-coordinate relative to the exposed
Gerd Moellmann <gerd@gnu.org>
parents: 34159
diff changeset
5756 AREA. The first glyph of the text area can be partially visible.
8f8830861b15 (expose_area): Pass x-coordinate relative to the exposed
Gerd Moellmann <gerd@gnu.org>
parents: 34159
diff changeset
5757 The first glyphs of other areas cannot. */
8f8830861b15 (expose_area): Pass x-coordinate relative to the exposed
Gerd Moellmann <gerd@gnu.org>
parents: 34159
diff changeset
5758 if (area == LEFT_MARGIN_AREA)
8f8830861b15 (expose_area): Pass x-coordinate relative to the exposed
Gerd Moellmann <gerd@gnu.org>
parents: 34159
diff changeset
5759 start_x = 0;
8f8830861b15 (expose_area): Pass x-coordinate relative to the exposed
Gerd Moellmann <gerd@gnu.org>
parents: 34159
diff changeset
5760 else if (area == TEXT_AREA)
8f8830861b15 (expose_area): Pass x-coordinate relative to the exposed
Gerd Moellmann <gerd@gnu.org>
parents: 34159
diff changeset
5761 start_x = row->x + window_box_width (w, LEFT_MARGIN_AREA);
8f8830861b15 (expose_area): Pass x-coordinate relative to the exposed
Gerd Moellmann <gerd@gnu.org>
parents: 34159
diff changeset
5762 else
8f8830861b15 (expose_area): Pass x-coordinate relative to the exposed
Gerd Moellmann <gerd@gnu.org>
parents: 34159
diff changeset
5763 start_x = (window_box_width (w, LEFT_MARGIN_AREA)
8f8830861b15 (expose_area): Pass x-coordinate relative to the exposed
Gerd Moellmann <gerd@gnu.org>
parents: 34159
diff changeset
5764 + window_box_width (w, TEXT_AREA));
8f8830861b15 (expose_area): Pass x-coordinate relative to the exposed
Gerd Moellmann <gerd@gnu.org>
parents: 34159
diff changeset
5765 x = start_x;
8f8830861b15 (expose_area): Pass x-coordinate relative to the exposed
Gerd Moellmann <gerd@gnu.org>
parents: 34159
diff changeset
5766
25306
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5767 /* 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
5768 while (first < end
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5769 && 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
5770 {
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5771 x += first->pixel_width;
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5772 ++first;
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5773 }
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5774
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5775 /* Find the last one. */
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5776 last = first;
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5777 first_x = x;
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5778 while (last < end
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5779 && 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
5780 {
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5781 x += last->pixel_width;
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5782 ++last;
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5783 }
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5784
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5785 /* Repaint. */
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5786 if (last > first)
34181
8f8830861b15 (expose_area): Pass x-coordinate relative to the exposed
Gerd Moellmann <gerd@gnu.org>
parents: 34159
diff changeset
5787 x_draw_glyphs (w, first_x - start_x, row, area,
25306
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5788 first - row->glyphs[area],
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5789 last - row->glyphs[area],
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5790 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
5791 NULL, NULL, 0);
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5792 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5793 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5794
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5795
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5796 /* 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
5797 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
5798
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5799 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5800 expose_line (w, row, r)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5801 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5802 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5803 XRectangle *r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5804 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5805 xassert (row->enabled_p);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5806
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5807 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
5808 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
5809 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
5810 NULL, NULL, 0);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5811 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5812 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5813 if (row->used[LEFT_MARGIN_AREA])
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5814 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
5815 if (row->used[TEXT_AREA])
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5816 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
5817 if (row->used[RIGHT_MARGIN_AREA])
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5818 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
5819 x_draw_row_bitmaps (w, row);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5820 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5821 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5822
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5823
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5824 /* 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
5825
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5826 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5827 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
5828 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5829 XRectangle *r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5830 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5831 XRectangle cr, result;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5832 struct glyph *cursor_glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5833
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5834 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
5835 if (cursor_glyph)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5836 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5837 cr.x = w->phys_cursor.x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5838 cr.y = w->phys_cursor.y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5839 cr.width = cursor_glyph->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5840 cr.height = w->phys_cursor_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5841 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
5842 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5843 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5844 return 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5845 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5846
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5847
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5848 /* 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
5849 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
5850
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5851 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5852 expose_window (w, r)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5853 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5854 XRectangle *r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5855 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5856 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5857 int y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5858 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
5859 int cursor_cleared_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5860
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
5861 /* 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
5862 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
5863 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
5864 created window. */
34621
0a811c1d7a1d (expose_window): Don't redraw the window that's
Gerd Moellmann <gerd@gnu.org>
parents: 34526
diff changeset
5865 if (w->current_matrix == NULL || w == updated_window)
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
5866 return;
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
5867
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5868 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
5869 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
5870
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5871 /* Convert to window coordinates. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5872 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
5873 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
5874
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5875 /* Turn off the cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5876 if (!w->pseudo_window_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5877 && 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
5878 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5879 x_clear_cursor (w);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5880 cursor_cleared_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5881 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5882 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5883 cursor_cleared_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5884
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5885 /* 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
5886 row = w->current_matrix->rows;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5887 y = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5888 while (row->enabled_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5889 && y < yb
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5890 && y + row->height < r->y)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5891 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5892 y += row->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5893 ++row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5894 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5895
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5896 /* 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
5897 while (row->enabled_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5898 && y < yb
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5899 && y < r->y + r->height)
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 expose_line (w, row, r);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5902 y += row->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5903 ++row;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5906 /* 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
5907 if (WINDOW_WANTS_MODELINE_P (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5908 && (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
5909 row->enabled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5910 && row->y < r->y + r->height)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5911 expose_line (w, row, r);
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 if (!w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5914 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5915 /* Draw border between windows. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5916 x_draw_vertical_border (w);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5917
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5918 /* Turn the cursor on again. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5919 if (cursor_cleared_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5920 x_update_window_cursor (w, 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5921 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5922 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5923
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5924
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5925 /* 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
5926 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
5927 empty. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5928
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5929 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5930 x_intersect_rectangles (r1, r2, result)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5931 XRectangle *r1, *r2, *result;
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 XRectangle *left, *right;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5934 XRectangle *upper, *lower;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5935 int intersection_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5936
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5937 /* 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
5938 if (r1->x < r2->x)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5939 left = r1, right = r2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5940 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5941 left = r2, right = r1;
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 /* 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
5944 otherwise there is no intersection. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5945 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
5946 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5947 result->x = right->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5948
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5949 /* 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
5950 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
5951 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
5952 - result->x);
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 /* Same game for Y. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5955 if (r1->y < r2->y)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5956 upper = r1, lower = r2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5957 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5958 upper = r2, lower = r1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5959
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5960 /* 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
5961 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
5962 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
5963 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5964 result->y = lower->y;
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 /* 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
5967 ends of upper and lower. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5968 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
5969 upper->y + upper->height)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5970 - result->y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5971 intersection_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5972 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5973 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5974
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5975 return intersection_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5976 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5980
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5981
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5982 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
5983 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
5984 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5985 {
3943
cbdf67dd68d0 * xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents: 3938
diff changeset
5986 /* 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
5987 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
5988 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
5989 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
5990 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
5991 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
5992 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
5993 UNBLOCK_INPUT;
12431
80a5aedfb4c7 (XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents: 12192
diff changeset
5994 x_update_cursor (f, 1);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5995 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5996
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5997 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
5998 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
5999 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6000 {
3943
cbdf67dd68d0 * xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents: 3938
diff changeset
6001 /* 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
6002 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
6003 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
6004 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
6005 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
6006 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
6007 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
6008 UNBLOCK_INPUT;
12431
80a5aedfb4c7 (XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents: 12192
diff changeset
6009 x_update_cursor (f, 1);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6010 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6011
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
6012 /* The focus has changed. Update the frames as necessary to reflect
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
6013 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
6014 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
6015 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
6016 Lisp code can tell when the switch took place by examining the events. */
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6017
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6018 static void
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6019 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
6020 struct x_display_info *dpyinfo;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
6021 struct frame *frame;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6022 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6023 struct frame *old_focus = dpyinfo->x_focus_frame;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6024
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6025 if (frame != dpyinfo->x_focus_frame)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6026 {
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
6027 /* Set this before calling other routines, so that they see
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
6028 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
6029 dpyinfo->x_focus_frame = frame;
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6030
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6031 if (old_focus && old_focus->auto_lower)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
6032 x_lower_frame (old_focus);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6033
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6034 #if 0
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
6035 selected_frame = frame;
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
6036 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
6037 selected_frame);
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
6038 Fselect_window (selected_frame->selected_window);
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
6039 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
6040 #endif /* ! 0 */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6041
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6042 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
6043 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
6044 else
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
6045 pending_autoraise_frame = 0;
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6046 }
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6047
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6048 x_frame_rehighlight (dpyinfo);
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6049 }
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6050
10223
97fc8c6b4a74 (XTupdate_begin): Discard records of prior mouse highlight
Richard M. Stallman <rms@gnu.org>
parents: 9823
diff changeset
6051 /* 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
6052
97fc8c6b4a74 (XTupdate_begin): Discard records of prior mouse highlight
Richard M. Stallman <rms@gnu.org>
parents: 9823
diff changeset
6053 void
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6054 x_mouse_leave (dpyinfo)
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6055 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
6056 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6057 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
6058 }
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6059
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
6060 /* 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
6061 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
6062 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
6063
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6064 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
6065 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
6066 the appropriate X display info. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6067
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6068 static void
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6069 XTframe_rehighlight (frame)
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6070 struct frame *frame;
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6071 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6072 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
6073 }
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6074
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6075 static void
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6076 x_frame_rehighlight (dpyinfo)
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6077 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
6078 {
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6079 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
6080
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6081 if (dpyinfo->x_focus_frame)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6082 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6083 dpyinfo->x_highlight_frame
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6084 = ((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
6085 ? 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
6086 : dpyinfo->x_focus_frame);
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6087 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
6088 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6089 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
6090 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
6091 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6092 }
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6093 else
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6094 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
6095
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6096 if (dpyinfo->x_highlight_frame != old_highlight)
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6097 {
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6098 if (old_highlight)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
6099 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
6100 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
6101 frame_highlight (dpyinfo->x_highlight_frame);
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6102 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6103 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6104
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6105
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6106
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6107 /* Keyboard processing - modifier keys, vendor-specific keysyms, etc. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6108
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6109 /* 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
6110 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
6111 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
6112 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
6113 {
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
6114 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
6115 KeySym *syms;
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6116 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
6117 XModifierKeymap *mods;
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6118
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
6119 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
6120 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
6121 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
6122 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
6123 dpyinfo->hyper_mod_mask = 0;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
6124
2127
adaf588e32a6 * xterm.c (x_find_modifier_meanings): XDisplayKeycodes only
Jim Blandy <jimb@redhat.com>
parents: 2064
diff changeset
6125 #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
6126 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
6127 #else
13884
26245345f6f1 (x_find_modifier_meanings): Fix !X11R4 code to use dpyinfo.
Richard M. Stallman <rms@gnu.org>
parents: 13782
diff changeset
6128 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
6129 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
6130 #endif
adaf588e32a6 * xterm.c (x_find_modifier_meanings): XDisplayKeycodes only
Jim Blandy <jimb@redhat.com>
parents: 2064
diff changeset
6131
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
6132 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
6133 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
6134 &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
6135 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
6136
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
6137 /* 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
6138 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
6139 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6140 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
6141
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6142 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
6143 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
6144 {
10287
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
6145 KeyCode code
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
6146 = 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
6147
6560
a071babfa9ea (x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents: 6521
diff changeset
6148 /* Zeroes are used for filler. Skip them. */
a071babfa9ea (x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents: 6521
diff changeset
6149 if (code == 0)
a071babfa9ea (x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents: 6521
diff changeset
6150 continue;
a071babfa9ea (x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents: 6521
diff changeset
6151
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6152 /* 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
6153 {
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6154 int code_col;
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6155
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6156 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
6157 {
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
6158 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
6159
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
6160 switch (sym)
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6161 {
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
6162 case XK_Meta_L:
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
6163 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
6164 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
6165 break;
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
6166
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
6167 case XK_Alt_L:
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
6168 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
6169 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
6170 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
6171
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
6172 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
6173 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
6174 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
6175 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
6176
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
6177 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
6178 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
6179 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
6180 break;
1436
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
6181
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
6182 case XK_Shift_Lock:
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
6183 /* 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
6184 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
6185 dpyinfo->shift_lock_mask = LockMask;
1436
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
6186 break;
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6187 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6188 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6189 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6190 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6191 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6192
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
6193 /* 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
6194 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
6195 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
6196 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
6197 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
6198 }
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
6199
2923
c8997402dd6b (x_find_modifier_meanings): If some keys are meta and alt,
Richard M. Stallman <rms@gnu.org>
parents: 2882
diff changeset
6200 /* 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
6201 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
6202 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
6203 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
6204 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
6205 }
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
6206
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6207 XFree ((char *) syms);
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
6208 XFreeModifiermap (mods);
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6209 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6210
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
6211 /* 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
6212 Emacs uses. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6213
1530
a7f8a1fe258e * xterm.c (x_convert_modifiers): Declare this to return an
Jim Blandy <jimb@redhat.com>
parents: 1436
diff changeset
6214 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
6215 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
6216 struct x_display_info *dpyinfo;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6217 unsigned int state;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6218 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
6219 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
6220 | ((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
6221 | ((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
6222 | ((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
6223 | ((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
6224 | ((state & dpyinfo->hyper_mod_mask) ? hyper_modifier : 0));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6225 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6226
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
6227 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
6228 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
6229 struct x_display_info *dpyinfo;
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
6230 unsigned int state;
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
6231 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
6232 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
6233 | ((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
6234 | ((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
6235 | ((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
6236 | ((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
6237 | ((state & meta_modifier) ? dpyinfo->meta_mod_mask : 0));
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
6238 }
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6239
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6240 /* Convert a keysym to its name. */
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6241
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6242 char *
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6243 x_get_keysym_name (keysym)
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6244 KeySym keysym;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6245 {
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6246 char *value;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6247
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6248 BLOCK_INPUT;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6249 value = XKeysymToString (keysym);
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6250 UNBLOCK_INPUT;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6251
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6252 return value;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6253 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6254
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6255
3585
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6256
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6257 /* Mouse clicks and mouse movement. Rah. */
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6258
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6259 /* 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
6260 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
6261 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
6262 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
6263
6023
67aa546e4ff1 (construct_menu_click): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 6022
diff changeset
6264 void
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6265 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
6266 FRAME_PTR f;
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6267 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
6268 register int *x, *y;
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6269 XRectangle *bounds;
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6270 int noclip;
3585
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6271 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6272 /* 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
6273 even for negative values. */
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6274 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
6275 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
6276 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
6277 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
6278
3585
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6279 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
6280 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
6281
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6282 if (bounds)
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6283 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
6284 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
6285 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
6286 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
6287 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
6288 }
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6289
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6290 if (!noclip)
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6291 {
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6292 if (pix_x < 0)
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6293 pix_x = 0;
16301
a02555b4b2b9 (x_scroll_bar_create, x_scroll_bar_move):
Richard M. Stallman <rms@gnu.org>
parents: 16251
diff changeset
6294 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
6295 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
6296
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6297 if (pix_y < 0)
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6298 pix_y = 0;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6299 else if (pix_y > f->height)
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6300 pix_y = f->height;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6301 }
3585
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6302
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6303 *x = pix_x;
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6304 *y = pix_y;
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6305 }
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6306
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6307
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6308 /* 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
6309 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
6310 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
6311 return 0. */
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 int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6314 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
6315 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6316 int hpos, vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6317 int *frame_x, *frame_y;
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 int success_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6320
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6321 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
6322 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
6323
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6324 if (display_completed)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6325 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6326 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
6327 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
6328 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
6329
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6330 *frame_y = row->y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6331 *frame_x = row->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6332 while (glyph < end)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6333 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6334 *frame_x += glyph->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6335 ++glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6336 }
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 success_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6339 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6340 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6341 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6342 *frame_y = *frame_x = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6343 success_p = 0;
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 *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
6347 *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
6348 return success_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6349 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6350
6055
a9f61727a90c (construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents: 6023
diff changeset
6351
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6352 /* Prepare a mouse-event in *RESULT for placement in the input queue.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6353
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6354 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
6355 the mouse. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6356
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6357 static Lisp_Object
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
6358 construct_mouse_click (result, event, f)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6359 struct input_event *result;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6360 XButtonEvent *event;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
6361 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6362 {
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
6363 /* Make the event type no_event; we'll change that when we decide
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6364 otherwise. */
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
6365 result->kind = mouse_click;
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6366 result->code = event->button - Button1;
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 642
diff changeset
6367 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
6368 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
6369 event->state)
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
6370 | (event->type == ButtonRelease
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
6371 ? up_modifier
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
6372 : down_modifier));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6373
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6374 XSETINT (result->x, event->x);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6375 XSETINT (result->y, event->y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6376 XSETFRAME (result->frame_or_window, f);
30197
3237a5529020 (construct_mouse_click, x_scroll_bar_to_input_event)
Gerd Moellmann <gerd@gnu.org>
parents: 30182
diff changeset
6377 result->arg = Qnil;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6378 return Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6379 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6380
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6381
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6382 /* Function to report a mouse movement to the mainstream Emacs code.
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6383 The input handler calls this.
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6384
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6385 We have received a mouse movement event, which is given in *event.
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6386 If the mouse is over a different glyph than it was last time, tell
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6387 the mainstream emacs code by setting mouse_moved. If not, ask for
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6388 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
6389
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6390 static XMotionEvent last_mouse_motion_event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6391 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
6392
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6393 static void
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6394 note_mouse_movement (frame, event)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
6395 FRAME_PTR frame;
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6396 XMotionEvent *event;
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6397 {
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
6398 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
6399 last_mouse_motion_event = *event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6400 XSETFRAME (last_mouse_motion_frame, frame);
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
6401
7680
8212755ff793 (note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 7651
diff changeset
6402 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
6403 {
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
6404 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
6405 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
6406 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
6407 }
8212755ff793 (note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 7651
diff changeset
6408
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6409 /* 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
6410 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
6411 || 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
6412 || 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
6413 || 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
6414 {
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
6415 frame->mouse_moved = 1;
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
6416 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
6417 note_mouse_highlight (frame, event->x, event->y);
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6418 }
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6419 }
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6420
6644
8e2379ce4fcb (fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents: 6631
diff changeset
6421 /* 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
6422
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6423 int disable_mouse_highlight;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6424
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6425
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6426
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6427 /************************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6428 Mouse Face
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6429 ************************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6430
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6431 /* 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
6432 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
6433 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
6434 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
6435 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
6436 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
6437 date. */
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 static struct glyph *
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6440 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
6441 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6442 int x, y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6443 int *hpos, *vpos, *area;
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 struct glyph *glyph, *end;
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
6446 struct glyph_row *row = NULL;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6447 int x0, i, left_area_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6448
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6449 /* 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
6450 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
6451 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6452 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
6453 if (!row->enabled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6454 return NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6455 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
6456 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6457 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6458
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6459 *vpos = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6460 *hpos = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6461
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6462 /* 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
6463 if (i == w->current_matrix->nrows)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6464 return NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6465
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6466 /* Get the glyph area containing X. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6467 if (w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6468 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6469 *area = TEXT_AREA;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6470 x0 = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6471 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6472 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6473 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6474 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
6475 if (x < left_area_width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6476 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6477 *area = LEFT_MARGIN_AREA;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6478 x0 = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6479 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6480 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
6481 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6482 *area = TEXT_AREA;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6483 x0 = row->x + left_area_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6484 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6485 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6486 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6487 *area = RIGHT_MARGIN_AREA;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6488 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
6489 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6490 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6491
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6492 /* Find glyph containing X. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6493 glyph = row->glyphs[*area];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6494 end = glyph + row->used[*area];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6495 while (glyph < end)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6496 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6497 if (x < x0 + glyph->pixel_width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6498 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6499 if (w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6500 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6501 else if (BUFFERP (glyph->object))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6502 break;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6505 x0 += glyph->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6506 ++glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6507 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6508
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6509 if (glyph == end)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6510 return NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6511
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6512 *hpos = glyph - row->glyphs[*area];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6513 return glyph;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6516
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6517 /* 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
6518 Takes pseudo-windows into account. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6519
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6520 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6521 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
6522 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6523 int *x, *y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6524 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6525 if (w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6526 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6527 /* 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
6528 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
6529 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6530 *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
6531 *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
6532 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6533 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6534 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6535 *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
6536 *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
6537 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6538 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6539
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6540
33958
f86c06451792 (note_mouse_highlight): Change the cursor shape
Gerd Moellmann <gerd@gnu.org>
parents: 33761
diff changeset
6541 /* Take proper action when mouse has moved to the mode or header line of
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6542 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
6543 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
6544 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
6545 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
6546
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6547 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6548 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
6549 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6550 int x, mode_line_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6551 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6552 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6553 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
6554 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
6555 struct glyph_row *row;
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 if (mode_line_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6558 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
6559 else
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
6560 row = MATRIX_HEADER_LINE_ROW (w->current_matrix);
33958
f86c06451792 (note_mouse_highlight): Change the cursor shape
Gerd Moellmann <gerd@gnu.org>
parents: 33761
diff changeset
6561
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6562 if (row->enabled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6563 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6564 struct glyph *glyph, *end;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6565 Lisp_Object help, map;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6566 int x0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6567
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6568 /* Find the glyph under X. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6569 glyph = row->glyphs[TEXT_AREA];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6570 end = glyph + row->used[TEXT_AREA];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6571 x0 = - (FRAME_LEFT_SCROLL_BAR_WIDTH (f) * CANON_X_UNIT (f)
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
6572 + FRAME_X_LEFT_FLAGS_AREA_WIDTH (f));
33958
f86c06451792 (note_mouse_highlight): Change the cursor shape
Gerd Moellmann <gerd@gnu.org>
parents: 33761
diff changeset
6573
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6574 while (glyph < end
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6575 && x >= x0 + glyph->pixel_width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6576 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6577 x0 += glyph->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6578 ++glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6579 }
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 if (glyph < end
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6582 && STRINGP (glyph->object)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6583 && XSTRING (glyph->object)->intervals
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6584 && glyph->charpos >= 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6585 && glyph->charpos < XSTRING (glyph->object)->size)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6586 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6587 /* 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
6588 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
6589 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
6590 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
6591 Qhelp_echo, glyph->object);
30050
ed1979c6dfb9 * xterm.c (note_mode_line_highlight, note_mouse_highlight)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30042
diff changeset
6592 if (!NILP (help))
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6593 {
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6594 help_echo = help;
30302
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
6595 XSETWINDOW (help_echo_window, w);
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6596 help_echo_object = glyph->object;
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6597 help_echo_pos = glyph->charpos;
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6598 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6599
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6600 /* 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
6601 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
6602 Qlocal_map, glyph->object);
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32945
diff changeset
6603 if (KEYMAPP (map))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6604 cursor = f->output_data.x->nontext_cursor;
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6605 else
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6606 {
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6607 map = Fget_text_property (make_number (glyph->charpos),
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6608 Qkeymap, glyph->object);
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32945
diff changeset
6609 if (KEYMAPP (map))
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6610 cursor = f->output_data.x->nontext_cursor;
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6611 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6612 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6613 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6614
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6615 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
6616 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6617
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 /* 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
6620 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
6621 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
6622 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
6623
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6624 static void
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6625 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
6626 struct frame *f;
11915
e2ab839155e1 (XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents: 11904
diff changeset
6627 int x, y;
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6628 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6629 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
6630 int portion;
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6631 Lisp_Object window;
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6632 struct window *w;
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6633
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6634 /* 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
6635 #ifdef USE_X_TOOLKIT
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6636 if (popup_activated ())
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6637 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6638 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6639
27967
7d61ff2d1530 (note_mouse_highlight): Return quickly if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 27962
diff changeset
6640 if (disable_mouse_highlight
7d61ff2d1530 (note_mouse_highlight): Return quickly if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 27962
diff changeset
6641 || !f->glyphs_initialized_p)
6644
8e2379ce4fcb (fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents: 6631
diff changeset
6642 return;
8e2379ce4fcb (fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents: 6631
diff changeset
6643
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6644 dpyinfo->mouse_face_mouse_x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6645 dpyinfo->mouse_face_mouse_y = y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6646 dpyinfo->mouse_face_mouse_frame = f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6647
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6648 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
6649 return;
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6650
6660
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
6651 if (gc_in_progress)
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
6652 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6653 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
6654 return;
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
6655 }
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
6656
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6657 /* Which window is that in? */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6658 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
6659
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6660 /* 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
6661 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
6662 clear_mouse_face (dpyinfo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6663
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6664 /* Not on a window -> return. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6665 if (!WINDOWP (window))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6666 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6667
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6668 /* Convert to window-relative pixel coordinates. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6669 w = XWINDOW (window);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6670 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
6671
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6672 /* 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
6673 buffer. */
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6674 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
6675 {
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6676 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
6677 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6678 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6679
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6680 if (portion == 1 || portion == 3)
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 /* 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
6683 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
6684 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6685 }
33958
f86c06451792 (note_mouse_highlight): Change the cursor shape
Gerd Moellmann <gerd@gnu.org>
parents: 33761
diff changeset
6686 else if (portion == 2)
f86c06451792 (note_mouse_highlight): Change the cursor shape
Gerd Moellmann <gerd@gnu.org>
parents: 33761
diff changeset
6687 XDefineCursor (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
f86c06451792 (note_mouse_highlight): Change the cursor shape
Gerd Moellmann <gerd@gnu.org>
parents: 33761
diff changeset
6688 f->output_data.x->horizontal_drag_cursor);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6689 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6690 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
6691 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
6692
6791
7036e4fd549f (dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents: 6767
diff changeset
6693 /* 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
6694 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
6695 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
6696 portion == 0
6791
7036e4fd549f (dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents: 6767
diff changeset
6697 && 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
6698 && 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
6699 && (XFASTINT (w->last_overlay_modified)
97283cd93432 (construct_menu_click, note_mouse_highlight, fast_find_position):
Karl Heuer <kwzh@gnu.org>
parents: 17316
diff changeset
6700 == 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
6701 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6702 int hpos, vpos, pos, i, area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6703 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6704
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6705 /* Find the glyph under X/Y. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6706 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
6707
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6708 /* 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
6709 if (glyph == NULL
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6710 || area != TEXT_AREA
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6711 || !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
6712 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6713 clear_mouse_face (dpyinfo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6714 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6715 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6716
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6717 pos = glyph->charpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6718 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
6719
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6720 /* 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
6721 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6722 Lisp_Object mouse_face, overlay, position;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6723 Lisp_Object *overlay_vec;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6724 int len, noverlays;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6725 struct buffer *obuf;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6726 int obegv, ozv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6727
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6728 /* 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
6729 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
6730 return;
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 /* 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
6733 overlays_at and compute_char_face. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6734 obuf = current_buffer;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6735 current_buffer = XBUFFER (w->buffer);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6736 obegv = BEGV;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6737 ozv = ZV;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6738 BEGV = BEG;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6739 ZV = Z;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6740
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6741 /* 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
6742 XSETINT (position, pos);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6743
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6744 /* 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
6745 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
6746 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
6747 len = 10;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6748 overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object));
30700
730f55a93973 (note_mouse_highlight): Update call to overlays_at.
Miles Bader <miles@gnu.org>
parents: 30653
diff changeset
6749 noverlays = overlays_at (pos, 0, &overlay_vec, &len, NULL, NULL, 0);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6750 if (noverlays > len)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6751 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6752 len = noverlays;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6753 overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object));
30700
730f55a93973 (note_mouse_highlight): Update call to overlays_at.
Miles Bader <miles@gnu.org>
parents: 30653
diff changeset
6754 noverlays = overlays_at (pos, 0, &overlay_vec, &len, NULL, NULL,0);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6755 }
30371
f69ecffe8453 (note_mouse_highlight): Process overlays in the right
Gerd Moellmann <gerd@gnu.org>
parents: 30369
diff changeset
6756
f69ecffe8453 (note_mouse_highlight): Process overlays in the right
Gerd Moellmann <gerd@gnu.org>
parents: 30369
diff changeset
6757 /* Sort overlays into increasing priority order. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6758 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
6759
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6760 /* Check mouse-face highlighting. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6761 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
6762 && vpos >= dpyinfo->mouse_face_beg_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6763 && vpos <= dpyinfo->mouse_face_end_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6764 && (vpos > dpyinfo->mouse_face_beg_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6765 || hpos >= dpyinfo->mouse_face_beg_col)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6766 && (vpos < dpyinfo->mouse_face_end_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6767 || hpos < dpyinfo->mouse_face_end_col
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6768 || dpyinfo->mouse_face_past_end)))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6769 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6770 /* 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
6771 clear_mouse_face (dpyinfo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6772
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6773 /* 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
6774 overlay = Qnil;
30371
f69ecffe8453 (note_mouse_highlight): Process overlays in the right
Gerd Moellmann <gerd@gnu.org>
parents: 30369
diff changeset
6775 for (i = noverlays - 1; i >= 0; --i)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6776 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6777 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
6778 if (!NILP (mouse_face))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6779 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6780 overlay = overlay_vec[i];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6781 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6782 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6783 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6784
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6785 /* 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
6786 if (NILP (overlay))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6787 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
6788
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6789 /* Handle the overlay case. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6790 if (! NILP (overlay))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6791 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6792 /* 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
6793 should be active. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6794 Lisp_Object before, after;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6795 int ignore;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6796
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6797 before = Foverlay_start (overlay);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6798 after = Foverlay_end (overlay);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6799 /* 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
6800 fast_find_position (w, XFASTINT (before),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6801 &dpyinfo->mouse_face_beg_col,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6802 &dpyinfo->mouse_face_beg_row,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6803 &dpyinfo->mouse_face_beg_x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6804 &dpyinfo->mouse_face_beg_y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6805 dpyinfo->mouse_face_past_end
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6806 = !fast_find_position (w, XFASTINT (after),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6807 &dpyinfo->mouse_face_end_col,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6808 &dpyinfo->mouse_face_end_row,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6809 &dpyinfo->mouse_face_end_x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6810 &dpyinfo->mouse_face_end_y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6811 dpyinfo->mouse_face_window = window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6812 dpyinfo->mouse_face_face_id
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6813 = 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
6814 &ignore, pos + 1, 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6815
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6816 /* Display it as active. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6817 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
6818 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6819 /* Handle the text property case. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6820 else if (! NILP (mouse_face))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6821 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6822 /* 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
6823 should be active. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6824 Lisp_Object before, after, beginning, end;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6825 int ignore;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6826
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6827 beginning = Fmarker_position (w->start);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6828 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
6829 - XFASTINT (w->window_end_pos)));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6830 before
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6831 = 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
6832 Qmouse_face,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6833 w->buffer, beginning);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6834 after
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6835 = 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
6836 w->buffer, end);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6837 /* 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
6838 fast_find_position (w, XFASTINT (before),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6839 &dpyinfo->mouse_face_beg_col,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6840 &dpyinfo->mouse_face_beg_row,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6841 &dpyinfo->mouse_face_beg_x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6842 &dpyinfo->mouse_face_beg_y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6843 dpyinfo->mouse_face_past_end
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6844 = !fast_find_position (w, XFASTINT (after),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6845 &dpyinfo->mouse_face_end_col,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6846 &dpyinfo->mouse_face_end_row,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6847 &dpyinfo->mouse_face_end_x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6848 &dpyinfo->mouse_face_end_y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6849 dpyinfo->mouse_face_window = window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6850 dpyinfo->mouse_face_face_id
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6851 = 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
6852 &ignore, pos + 1, 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6853
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6854 /* Display it as active. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6855 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
6856 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6857 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6858
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6859 /* Look for a `help-echo' property. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6860 {
30369
cf4163d1218e (note_mouse_highlight): If help-echo was found in an
Gerd Moellmann <gerd@gnu.org>
parents: 30321
diff changeset
6861 Lisp_Object help, overlay;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6862
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6863 /* Check overlays first. */
31694
97c48afc4c5a (x_draw_image_glyph_string): Remove a comment describing
Gerd Moellmann <gerd@gnu.org>
parents: 31614
diff changeset
6864 help = overlay = Qnil;
30371
f69ecffe8453 (note_mouse_highlight): Process overlays in the right
Gerd Moellmann <gerd@gnu.org>
parents: 30369
diff changeset
6865 for (i = noverlays - 1; i >= 0 && NILP (help); --i)
30369
cf4163d1218e (note_mouse_highlight): If help-echo was found in an
Gerd Moellmann <gerd@gnu.org>
parents: 30321
diff changeset
6866 {
cf4163d1218e (note_mouse_highlight): If help-echo was found in an
Gerd Moellmann <gerd@gnu.org>
parents: 30321
diff changeset
6867 overlay = overlay_vec[i];
cf4163d1218e (note_mouse_highlight): If help-echo was found in an
Gerd Moellmann <gerd@gnu.org>
parents: 30321
diff changeset
6868 help = Foverlay_get (overlay, Qhelp_echo);
cf4163d1218e (note_mouse_highlight): If help-echo was found in an
Gerd Moellmann <gerd@gnu.org>
parents: 30321
diff changeset
6869 }
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6870
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6871 if (!NILP (help))
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6872 {
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6873 help_echo = help;
30302
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
6874 help_echo_window = window;
30369
cf4163d1218e (note_mouse_highlight): If help-echo was found in an
Gerd Moellmann <gerd@gnu.org>
parents: 30321
diff changeset
6875 help_echo_object = overlay;
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6876 help_echo_pos = pos;
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6877 }
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6878 else
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6879 {
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6880 /* Try text properties. */
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6881 if ((STRINGP (glyph->object)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6882 && glyph->charpos >= 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6883 && glyph->charpos < XSTRING (glyph->object)->size)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6884 || (BUFFERP (glyph->object)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6885 && glyph->charpos >= BEGV
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6886 && glyph->charpos < ZV))
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6887 help = Fget_text_property (make_number (glyph->charpos),
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6888 Qhelp_echo, glyph->object);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6889
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6890 if (!NILP (help))
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6891 {
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6892 help_echo = help;
30302
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
6893 help_echo_window = window;
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6894 help_echo_object = glyph->object;
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6895 help_echo_pos = glyph->charpos;
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6896 }
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6897 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6898 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6899
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6900 BEGV = obegv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6901 ZV = ozv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6902 current_buffer = obuf;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6903 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6904 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6905 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6906
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6907 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6908 redo_mouse_highlight ()
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6909 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6910 if (!NILP (last_mouse_motion_frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6911 && 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
6912 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
6913 last_mouse_motion_event.x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6914 last_mouse_motion_event.y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6915 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6916
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6917
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6918
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6919 /***********************************************************************
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6920 Tool-bars
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6921 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6922
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6923 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
6924 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
6925
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6926 /* 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
6927 or -1. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6928
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6929 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
6930
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6931
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6932 /* 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
6933 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
6934 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
6935 on a tool-bar item. Return in *PROP_IDX the index of the tool-bar
33761
047804baee1c (x_handle_tool_bar_click, note_tool_bar_highlight):
Gerd Moellmann <gerd@gnu.org>
parents: 33643
diff changeset
6936 item in F->tool_bar_items. Value is
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6937
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6938 -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
6939 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
6940 1 otherwise. */
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6941
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6942 static int
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6943 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
6944 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6945 int x, y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6946 struct glyph **glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6947 int *hpos, *vpos, *prop_idx;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6948 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6949 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
6950 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
6951 int area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6952
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6953 /* Find the glyph under X/Y. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6954 *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
6955 if (*glyph == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6956 return -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6957
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6958 /* Get the start of this tool-bar item's properties in
33761
047804baee1c (x_handle_tool_bar_click, note_tool_bar_highlight):
Gerd Moellmann <gerd@gnu.org>
parents: 33643
diff changeset
6959 f->tool_bar_items. */
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6960 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
6961 return -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6962
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6963 /* 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
6964 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
6965 && *vpos >= dpyinfo->mouse_face_beg_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6966 && *vpos <= dpyinfo->mouse_face_end_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6967 && (*vpos > dpyinfo->mouse_face_beg_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6968 || *hpos >= dpyinfo->mouse_face_beg_col)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6969 && (*vpos < dpyinfo->mouse_face_end_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6970 || *hpos < dpyinfo->mouse_face_end_col
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6971 || dpyinfo->mouse_face_past_end))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6972 return 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6973
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6974 return 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6975 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6976
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6977
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6978 /* 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
6979 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
6980 or ButtonRelase. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6981
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6982 static void
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6983 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
6984 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6985 XButtonEvent *button_event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6986 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6987 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
6988 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
6989 int hpos, vpos, prop_idx;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6990 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6991 Lisp_Object enabled_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6992 int x = button_event->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6993 int y = button_event->y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6994
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6995 /* 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
6996 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
6997 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
6998 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6999
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7000 /* If item is disabled, do nothing. */
33761
047804baee1c (x_handle_tool_bar_click, note_tool_bar_highlight):
Gerd Moellmann <gerd@gnu.org>
parents: 33643
diff changeset
7001 enabled_p = AREF (f->tool_bar_items, 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
7002 if (NILP (enabled_p))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7003 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7004
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7005 if (button_event->type == ButtonPress)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7006 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7007 /* Show item in pressed state. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7008 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
7009 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
7010 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
7011 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7012 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7013 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7014 Lisp_Object key, frame;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7015 struct input_event event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7016
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7017 /* Show item in released state. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7018 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
7019 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
7020
33761
047804baee1c (x_handle_tool_bar_click, note_tool_bar_highlight):
Gerd Moellmann <gerd@gnu.org>
parents: 33643
diff changeset
7021 key = AREF (f->tool_bar_items, 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
7022
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7023 XSETFRAME (frame, f);
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7024 event.kind = TOOL_BAR_EVENT;
30182
73181a26fc85 (x_handle_tool_bar_click): Store the frame in the
Gerd Moellmann <gerd@gnu.org>
parents: 30160
diff changeset
7025 event.frame_or_window = frame;
73181a26fc85 (x_handle_tool_bar_click): Store the frame in the
Gerd Moellmann <gerd@gnu.org>
parents: 30160
diff changeset
7026 event.arg = frame;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7027 kbd_buffer_store_event (&event);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7028
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7029 event.kind = TOOL_BAR_EVENT;
30182
73181a26fc85 (x_handle_tool_bar_click): Store the frame in the
Gerd Moellmann <gerd@gnu.org>
parents: 30160
diff changeset
7030 event.frame_or_window = frame;
73181a26fc85 (x_handle_tool_bar_click): Store the frame in the
Gerd Moellmann <gerd@gnu.org>
parents: 30160
diff changeset
7031 event.arg = key;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7032 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
7033 button_event->state);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7034 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
7035 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
7036 }
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7037 }
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7038
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7039
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7040 /* 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
7041 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
7042 note_mouse_highlight. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7043
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7044 static void
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7045 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
7046 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7047 int x, y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7048 {
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7049 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
7050 struct window *w = XWINDOW (window);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7051 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
7052 int hpos, vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7053 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7054 struct glyph_row *row;
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
7055 int i;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7056 Lisp_Object enabled_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7057 int prop_idx;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7058 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
7059 int mouse_down_p, rc;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7060
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7061 /* 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
7062 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
7063 if (x <= 0 || y <= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7064 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7065 clear_mouse_face (dpyinfo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7066 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7067 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7068
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7069 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
7070 if (rc < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7071 {
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7072 /* Not on tool-bar item. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7073 clear_mouse_face (dpyinfo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7074 return;
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 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
7077 /* 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
7078 goto set_help_echo;
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 clear_mouse_face (dpyinfo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7081
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7082 /* 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
7083 mouse_down_p = (dpyinfo->grabbed
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7084 && f == last_mouse_frame
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7085 && FRAME_LIVE_P (f));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7086 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
7087 && 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
7088 return;
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 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
7091 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
7092
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7093 /* If tool-bar item is not enabled, don't highlight it. */
33761
047804baee1c (x_handle_tool_bar_click, note_tool_bar_highlight):
Gerd Moellmann <gerd@gnu.org>
parents: 33643
diff changeset
7094 enabled_p = AREF (f->tool_bar_items, 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
7095 if (!NILP (enabled_p))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7096 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7097 /* 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
7098 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
7099 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
7100 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
7101 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
7102
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7103 /* 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
7104 dpyinfo->mouse_face_beg_col = hpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7105 dpyinfo->mouse_face_beg_row = vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7106 dpyinfo->mouse_face_beg_x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7107 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
7108 dpyinfo->mouse_face_past_end = 0;
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 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
7111 dpyinfo->mouse_face_end_row = vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7112 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
7113 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
7114 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
7115 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
7116
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7117 /* Display it as active. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7118 show_mouse_face (dpyinfo, draw);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7119 dpyinfo->mouse_face_image_state = draw;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7120 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7121
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7122 set_help_echo:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7123
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7124 /* 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
7125 XTread_socket does the rest. */
30302
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
7126 help_echo_object = help_echo_window = Qnil;
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
7127 help_echo_pos = -1;
33761
047804baee1c (x_handle_tool_bar_click, note_tool_bar_highlight):
Gerd Moellmann <gerd@gnu.org>
parents: 33643
diff changeset
7128 help_echo = AREF (f->tool_bar_items, prop_idx + TOOL_BAR_ITEM_HELP);
30050
ed1979c6dfb9 * xterm.c (note_mode_line_highlight, note_mouse_highlight)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30042
diff changeset
7129 if (NILP (help_echo))
33761
047804baee1c (x_handle_tool_bar_click, note_tool_bar_highlight):
Gerd Moellmann <gerd@gnu.org>
parents: 33643
diff changeset
7130 help_echo = AREF (f->tool_bar_items, 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
7131 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7134
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7135 /* 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
7136 *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
7137 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
7138 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
7139 last line in 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 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7142 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
7143 struct window *w;
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7144 int pos;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7145 int *hpos, *vpos, *x, *y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7146 {
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7147 int i;
6644
8e2379ce4fcb (fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents: 6631
diff changeset
7148 int lastcol;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7149 int maybe_next_line_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7150 int line_start_position;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7151 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
7152 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
7153 struct glyph_row *best_row = row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7154 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
7155 int current_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7156
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7157 while (row->y < yb)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7158 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7159 if (row->used[TEXT_AREA])
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7160 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
7161 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7162 line_start_position = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7163
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7164 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
7165 break;
9762
567e3670acc3 (fast_find_position): Special case if POS is end of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 9741
diff changeset
7166 /* 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
7167 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
7168 else if (line_start_position == pos
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7169 && pos == BUF_ZV (XBUFFER (w->buffer)))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7170 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7171 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
7172 break;
567e3670acc3 (fast_find_position): Special case if POS is end of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 9741
diff changeset
7173 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7174 else if (line_start_position > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7175 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7176 best_row = row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7177 best_row_vpos = row_vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7178 }
28281
bd0839655485 (fast_find_position): Make sure not to consider rows
Gerd Moellmann <gerd@gnu.org>
parents: 28231
diff changeset
7179
bd0839655485 (fast_find_position): Make sure not to consider rows
Gerd Moellmann <gerd@gnu.org>
parents: 28231
diff changeset
7180 if (row->y + row->height >= yb)
bd0839655485 (fast_find_position): Make sure not to consider rows
Gerd Moellmann <gerd@gnu.org>
parents: 28231
diff changeset
7181 break;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7182
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7183 ++row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7184 ++row_vpos;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7187 /* 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
7188 lastcol = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7189 current_x = best_row->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7190 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
7191 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7192 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
7193 int charpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7194
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7195 charpos = glyph->charpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7196 if (charpos == pos)
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 *hpos = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7199 *vpos = best_row_vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7200 *x = current_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7201 *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
7202 return 1;
8e2379ce4fcb (fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents: 6631
diff changeset
7203 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7204 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
7205 break;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7206 else if (charpos > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7207 lastcol = i;
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 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
7210 }
8e2379ce4fcb (fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents: 6631
diff changeset
7211
9762
567e3670acc3 (fast_find_position): Special case if POS is end of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 9741
diff changeset
7212 /* 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
7213 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
7214 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
7215 if (maybe_next_line_p)
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 ++best_row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7218 ++best_row_vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7219 lastcol = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7220 current_x = best_row->x;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7223 *vpos = best_row_vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7224 *hpos = lastcol + 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7225 *x = current_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7226 *y = best_row->y;
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7227 return 0;
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7228 }
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7229
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7230
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7231 /* 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
7232 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
7233
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7234 static void
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7235 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
7236 struct x_display_info *dpyinfo;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7237 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
7238 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7239 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
7240 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
7241 int i;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7242 int cursor_off_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7243 struct cursor_pos saved_cursor;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7244
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7245 saved_cursor = output_cursor;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7246
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7247 /* 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
7248 to do anything. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7249 if (w->current_matrix == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7250 goto set_x_cursor;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7251
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7252 /* 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
7253 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
7254 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
7255 goto set_x_cursor;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7256
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7257 set_output_cursor (&w->phys_cursor);
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 /* 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
7260 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
7261 i <= dpyinfo->mouse_face_end_row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7262 i++)
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 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
7265 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
7266
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7267 /* 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
7268 if (!row->enabled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7269 continue;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7270
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7271 /* 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
7272 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
7273 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7274 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
7275 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
7276 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7277 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7278 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7279 start_hpos = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7280 start_x = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7281 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7282
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7283 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
7284 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
7285 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7286 end_hpos = row->used[TEXT_AREA];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7287
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7288 /* 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
7289 cursor off. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7290 if (!w->pseudo_window_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7291 && i == output_cursor.vpos
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7292 && output_cursor.hpos >= start_hpos - 1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7293 && output_cursor.hpos <= end_hpos)
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 x_update_window_cursor (w, 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7296 cursor_off_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7297 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7298
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7299 if (end_hpos > start_hpos)
30153
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
7300 {
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
7301 row->mouse_face_p = draw == DRAW_MOUSE_FACE;
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
7302 x_draw_glyphs (w, start_x, row, TEXT_AREA,
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
7303 start_hpos, end_hpos, draw, NULL, NULL, 0);
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
7304 }
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7305 }
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7306
6660
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
7307 /* 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
7308 if (cursor_off_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7309 x_display_cursor (w, 1,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7310 output_cursor.hpos, output_cursor.vpos,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7311 output_cursor.x, output_cursor.y);
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 output_cursor = saved_cursor;
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 set_x_cursor:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7316
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7317 /* Change the mouse cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7318 if (draw == DRAW_NORMAL_TEXT)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7319 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
7320 f->output_data.x->text_cursor);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7321 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
7322 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
7323 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
7324 else
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
7325 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
7326 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
7327 }
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7328
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7329 /* 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
7330 Redraw it un-highlighted first. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7331
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7332 void
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7333 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
7334 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
7335 {
35272
b179c9139145 (clear_mouse_face=): Improve a comment.
Gerd Moellmann <gerd@gnu.org>
parents: 35082
diff changeset
7336 #if 0 /* This prevents redrawing tool bar items when changing from one
b179c9139145 (clear_mouse_face=): Improve a comment.
Gerd Moellmann <gerd@gnu.org>
parents: 35082
diff changeset
7337 to another while a tooltip is open, so don't do it. */
34449
06453a32471a (clear_mouse_face): Treat tip_frame as a Lisp_Object.
Gerd Moellmann <gerd@gnu.org>
parents: 34318
diff changeset
7338 if (!NILP (tip_frame))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7339 return;
35066
f4b5ec3edf1a (clear_mouse_face): Don't return if tip_frame is
Gerd Moellmann <gerd@gnu.org>
parents: 34978
diff changeset
7340 #endif
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7341
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7342 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
7343 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
7344
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7345 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
7346 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
7347 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
7348 }
16491
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7349
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7350
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7351 /* Clear any mouse-face on window W. This function is part of the
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7352 redisplay interface, and is called from try_window_id and similar
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7353 functions to ensure the mouse-highlight is off. */
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7354
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7355 static void
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7356 x_clear_mouse_face (w)
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7357 struct window *w;
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7358 {
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7359 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (XFRAME (w->frame));
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7360 Lisp_Object window;
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7361
31864
3df9d3316990 (x_clear_mouse_face): Blick/unblock input.
Gerd Moellmann <gerd@gnu.org>
parents: 31844
diff changeset
7362 BLOCK_INPUT;
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7363 XSETWINDOW (window, w);
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7364 if (EQ (window, dpyinfo->mouse_face_window))
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7365 clear_mouse_face (dpyinfo);
31864
3df9d3316990 (x_clear_mouse_face): Blick/unblock input.
Gerd Moellmann <gerd@gnu.org>
parents: 31844
diff changeset
7366 UNBLOCK_INPUT;
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7367 }
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7368
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7369
16491
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7370 /* 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
7371 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
7372
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
7373 void
16491
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7374 cancel_mouse_face (f)
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7375 FRAME_PTR f;
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7376 {
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7377 Lisp_Object window;
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7378 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
7379
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7380 window = dpyinfo->mouse_face_window;
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7381 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
7382 {
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7383 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
7384 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
7385 dpyinfo->mouse_face_window = Qnil;
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7386 }
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7387 }
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7388
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7389 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
7390 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
7391
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7392 /* 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
7393 *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
7394
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
7395 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
7396 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
7397 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
7398 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
7399
11436
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
7400 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
7401 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
7402 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
7403
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7404 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
7405 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
7406
3669
fd4187a96445 (XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents: 3639
diff changeset
7407 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
7408
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7409 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
7410 movement. */
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7411
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7412 static void
11122
ce63fb361ae9 (XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents: 11015
diff changeset
7413 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
7414 FRAME_PTR *fp;
11122
ce63fb361ae9 (XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents: 11015
diff changeset
7415 int insist;
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7416 Lisp_Object *bar_window;
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7417 enum scroll_bar_part *part;
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7418 Lisp_Object *x, *y;
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
7419 unsigned long *time;
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7420 {
3669
fd4187a96445 (XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents: 3639
diff changeset
7421 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
7422
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7423 BLOCK_INPUT;
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7424
20180
bfbf6a2939a3 (XTmouse_position): Handle INSIST < 0.
Karl Heuer <kwzh@gnu.org>
parents: 19447
diff changeset
7425 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
7426 x_scroll_bar_report_motion (fp, bar_window, part, x, y, time);
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7427 else
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7428 {
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7429 Window root;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7430 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
7431
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7432 Window dummy_window;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7433 int dummy;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7434
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
7435 Lisp_Object frame, tail;
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
7436
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
7437 /* 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
7438 FOR_EACH_FRAME (tail, frame)
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
7439 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
7440 XFRAME (frame)->mouse_moved = 0;
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
7441
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7442 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
7443
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7444 /* 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
7445 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
7446 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
7447
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7448 /* 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
7449 &root,
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7450
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7451 /* 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
7452 a different screen. */
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7453 &dummy_window,
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7454
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7455 /* The position on that root window. */
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
7456 &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
7457
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7458 /* 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
7459 &dummy, &dummy,
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7460
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7461 /* 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
7462 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
7463 (unsigned int *) &dummy);
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7464
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7465 /* 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
7466 containing the pointer. */
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7467 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7468 Window win, child;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7469 int win_x, win_y;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7470 int parent_x = 0, parent_y = 0;
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7471 int count;
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7472
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7473 win = root;
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7474
11436
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
7475 /* 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
7476 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
7477 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
7478
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7479 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
7480
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
7481 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
7482 && 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
7483 {
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7484 /* 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
7485 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
7486 XTranslateCoordinates (FRAME_X_DISPLAY (*fp),
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7487
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7488 /* From-window, to-window. */
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7489 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
7490
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7491 /* 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
7492 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
7493
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7494 /* Child of win. */
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7495 &child);
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7496 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
7497 }
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7498 else
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7499 {
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7500 while (1)
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7501 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
7502 XTranslateCoordinates (FRAME_X_DISPLAY (*fp),
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7503
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7504 /* From-window, to-window. */
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7505 root, win,
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7506
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7507 /* From-position, to-position. */
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7508 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
7509
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7510 /* Child of win. */
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7511 &child);
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7512
13627
8873aa3451dd (XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents: 13598
diff changeset
7513 if (child == None || child == win)
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7514 break;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7515
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7516 win = child;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7517 parent_x = win_x;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7518 parent_y = win_y;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7519 }
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7520
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7521 /* Now we know that:
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7522 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
7523 (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
7524 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
7525 (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
7526 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
7527 (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
7528 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
7529 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
7530 never use them in that case.) */
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7531
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7532 /* 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
7533 f1 = x_any_window_to_frame (FRAME_X_DISPLAY_INFO (*fp), win);
34008
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
7534
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
7535 #ifdef USE_X_TOOLKIT
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
7536 /* If we end up with the menu bar window, say it's not
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
7537 on the frame. */
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
7538 if (f1 != NULL
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
7539 && f1->output_data.x->menubar_widget
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
7540 && win == XtWindow (f1->output_data.x->menubar_widget))
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
7541 f1 = NULL;
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
7542 #endif /* USE_X_TOOLKIT */
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7543 }
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
7544
11436
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
7545 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
7546 f1 = 0;
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
7547
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7548 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
7549
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7550 /* 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
7551 if (! f1)
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7552 {
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7553 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
7554
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7555 if (bar)
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7556 {
3669
fd4187a96445 (XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents: 3639
diff changeset
7557 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
7558 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
7559 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
7560 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7561 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7562
20180
bfbf6a2939a3 (XTmouse_position): Handle INSIST < 0.
Karl Heuer <kwzh@gnu.org>
parents: 19447
diff changeset
7563 if (f1 == 0 && insist > 0)
25682
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
7564 f1 = SELECTED_FRAME ();
11122
ce63fb361ae9 (XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents: 11015
diff changeset
7565
3669
fd4187a96445 (XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents: 3639
diff changeset
7566 if (f1)
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7567 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7568 /* 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
7569 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
7570 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
7571 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
7572 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
7573 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
7574 the frame are divided into. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7575
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7576 #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
7577 int ignore1, ignore2;
a9f61727a90c (construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents: 6023
diff changeset
7578 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
7579 &last_mouse_glyph,
11122
ce63fb361ae9 (XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents: 11015
diff changeset
7580 FRAME_X_DISPLAY_INFO (f1)->grabbed
ce63fb361ae9 (XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents: 11015
diff changeset
7581 || insist);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7582 #else
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 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
7585 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
7586 int x = win_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7587 int y = win_y;
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 /* 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
7590 round down even for negative values. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7591 if (x < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7592 x -= width - 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7593 if (y < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7594 y -= height - 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7595
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7596 last_mouse_glyph.width = width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7597 last_mouse_glyph.height = height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7598 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
7599 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
7600 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7601 #endif
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7602
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7603 *bar_window = Qnil;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7604 *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
7605 *fp = f1;
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
7606 XSETINT (*x, win_x);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
7607 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
7608 *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
7609 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7610 }
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7611 }
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7612
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7613 UNBLOCK_INPUT;
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7614 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7615
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7616
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7617 #ifdef USE_X_TOOLKIT
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7618
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7619 /* Atimer callback function for TIMER. Called every 0.1s to process
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7620 Xt timeouts, if needed. We must avoid calling XtAppPending as
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7621 much as possible because that function does an implicit XFlush
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7622 that slows us down. */
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7623
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7624 static void
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7625 x_process_timeouts (timer)
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7626 struct atimer *timer;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7627 {
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7628 if (toolkit_scroll_bar_interaction || popup_activated_flag)
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7629 {
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7630 BLOCK_INPUT;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7631 while (XtAppPending (Xt_app_con) & XtIMTimer)
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7632 XtAppProcessEvent (Xt_app_con, XtIMTimer);
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7633 UNBLOCK_INPUT;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7634 }
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7635 }
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7636
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7637 #endif /* USE_X_TOOLKIT */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7638
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7639
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7640 /* Scroll bar support. */
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7641
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7642 /* 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
7643 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
7644 bits. */
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7645
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7646 static struct scroll_bar *
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7647 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
7648 Window window_id;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7649 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7650 Lisp_Object tail;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7651
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7652 for (tail = Vframe_list;
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7653 XGCTYPE (tail) == Lisp_Cons;
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
7654 tail = XCDR (tail))
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7655 {
6521
a975c5944916 (x_window_to_scroll_bar, x_new_font): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6413
diff changeset
7656 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
7657
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
7658 frame = XCAR (tail);
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7659 /* 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
7660 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
7661 abort ();
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7662
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7663 /* 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
7664 right window ID. */
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7665 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
7666 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
7667 /* 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
7668 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
7669 ! GC_NILP (bar) || (bar = condemned,
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7670 condemned = Qnil,
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7671 ! 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
7672 bar = XSCROLL_BAR (bar)->next)
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7673 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
7674 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
7675 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7676
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7677 return 0;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7678 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7679
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7680
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7681
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7682 /************************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7683 Toolkit scroll bars
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7684 ************************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7685
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
7686 #ifdef USE_TOOLKIT_SCROLL_BARS
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7687
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7688 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
7689 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
7690 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
7691 struct scroll_bar *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7692 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
7693 int, int, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7694
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7695
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7696 /* 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
7697
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7698 static XtActionHookId action_hook_id;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7699
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7700 /* 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
7701 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
7702
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7703 static Lisp_Object window_being_scrolled;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7704
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7705 /* 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
7706
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7707 static int last_scroll_bar_part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7708
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7709 /* Whether this is an Xaw with arrow-scrollbars. This should imply
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7710 that movements of 1/20 of the screen size are mapped to up/down. */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7711
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7712 static Boolean xaw3d_arrow_scroll;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7713
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7714 /* Whether the drag scrolling maintains the mouse at the top of the
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7715 thumb. If not, resizing the thumb needs to be done more carefully
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7716 to avoid jerkyness. */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7717
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7718 static Boolean xaw3d_pick_top;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7719
24991
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 /* Action hook installed via XtAppAddActionHook when toolkit scroll
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7722 bars are used.. The hook is responsible for detecting when
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7723 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
7724 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
7725
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7726 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7727 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
7728 num_params)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7729 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7730 XtPointer client_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7731 String action_name;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7732 XEvent *event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7733 String *params;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7734 Cardinal *num_params;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7735 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7736 int scroll_bar_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7737 char *end_action;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7738
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7739 #ifdef USE_MOTIF
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7740 scroll_bar_p = XmIsScrollBar (widget);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7741 end_action = "Release";
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7742 #else /* !USE_MOTIF i.e. use Xaw */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7743 scroll_bar_p = XtIsSubclass (widget, scrollbarWidgetClass);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7744 end_action = "EndScroll";
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7745 #endif /* USE_MOTIF */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7746
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7747 if (scroll_bar_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7748 && strcmp (action_name, end_action) == 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7749 && WINDOWP (window_being_scrolled))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7750 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7751 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7752
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7753 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
7754 scroll_bar_end_scroll, 0, 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7755 w = XWINDOW (window_being_scrolled);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7756 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
7757 window_being_scrolled = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7758 last_scroll_bar_part = -1;
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7759
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7760 /* Xt timeouts no longer needed. */
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7761 toolkit_scroll_bar_interaction = 0;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7762 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7763 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7764
33643
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7765 /* A vector of windows used for communication between
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7766 x_send_scroll_bar_event and x_scroll_bar_to_input_event. */
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7767
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7768 static struct window **scroll_bar_windows;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7769 static int scroll_bar_windows_size;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7770
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7771
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7772 /* 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
7773 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
7774 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
7775 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
7776
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7777 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7778 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
7779 Lisp_Object window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7780 int part, portion, whole;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7781 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7782 XEvent event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7783 XClientMessageEvent *ev = (XClientMessageEvent *) &event;
33643
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7784 struct window *w = XWINDOW (window);
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7785 struct frame *f = XFRAME (w->frame);
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7786 int i;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7787
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7788 BLOCK_INPUT;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7789
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7790 /* 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
7791 ev->type = ClientMessage;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7792 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
7793 ev->display = FRAME_X_DISPLAY (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7794 ev->window = FRAME_X_WINDOW (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7795 ev->format = 32;
33643
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7796
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7797 /* We can only transfer 32 bits in the XClientMessageEvent, which is
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7798 not enough to store a pointer or Lisp_Object on a 64 bit system.
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7799 So, store the window in scroll_bar_windows and pass the index
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7800 into that array in the event. */
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7801 for (i = 0; i < scroll_bar_windows_size; ++i)
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7802 if (scroll_bar_windows[i] == NULL)
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7803 break;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7804
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7805 if (i == scroll_bar_windows_size)
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7806 {
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7807 int new_size = max (10, 2 * scroll_bar_windows_size);
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7808 size_t nbytes = new_size * sizeof *scroll_bar_windows;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7809 size_t old_nbytes = scroll_bar_windows_size * sizeof *scroll_bar_windows;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7810
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7811 scroll_bar_windows = (struct window **) xrealloc (scroll_bar_windows,
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7812 nbytes);
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7813 bzero (&scroll_bar_windows[i], nbytes - old_nbytes);
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7814 scroll_bar_windows_size = new_size;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7815 }
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7816
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7817 scroll_bar_windows[i] = w;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7818 ev->data.l[0] = (long) i;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7819 ev->data.l[1] = (long) part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7820 ev->data.l[2] = (long) 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7821 ev->data.l[3] = (long) portion;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7822 ev->data.l[4] = (long) whole;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7823
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7824 /* Make Xt timeouts work while the scroll bar is active. */
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7825 toolkit_scroll_bar_interaction = 1;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7826
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7827 /* 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
7828 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
7829 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
7830 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
7831 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7832 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7833
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7834
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7835 /* 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
7836 in *IEVENT. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7837
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7838 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7839 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
7840 XEvent *event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7841 struct input_event *ievent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7842 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7843 XClientMessageEvent *ev = (XClientMessageEvent *) event;
29717
acaa36b47f50 fix up more Lisp_Object/int conversion issues
Ken Raeburn <raeburn@raeburn.org>
parents: 29619
diff changeset
7844 Lisp_Object window;
acaa36b47f50 fix up more Lisp_Object/int conversion issues
Ken Raeburn <raeburn@raeburn.org>
parents: 29619
diff changeset
7845 struct frame *f;
33643
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7846 struct window *w;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7847
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7848 w = scroll_bar_windows[ev->data.l[0]];
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7849 scroll_bar_windows[ev->data.l[0]] = NULL;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7850
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7851 XSETWINDOW (window, w);
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
7852 f = XFRAME (w->frame);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7853
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7854 ievent->kind = scroll_bar_click;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7855 ievent->frame_or_window = window;
30197
3237a5529020 (construct_mouse_click, x_scroll_bar_to_input_event)
Gerd Moellmann <gerd@gnu.org>
parents: 30182
diff changeset
7856 ievent->arg = Qnil;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7857 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
7858 ievent->part = ev->data.l[1];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7859 ievent->code = ev->data.l[2];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7860 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
7861 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
7862 ievent->modifiers = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7863 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7864
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7865
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7866 #ifdef USE_MOTIF
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7867
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7868 /* 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
7869
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7870 #define XM_SB_MIN 1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7871 #define XM_SB_MAX 10000000
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7872 #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
7873
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7874
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7875 /* 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
7876 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
7877 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
7878
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7879 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7880 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
7881 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7882 XtPointer client_data, call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7883 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7884 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
7885 XmScrollBarCallbackStruct *cs = (XmScrollBarCallbackStruct *) call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7886 double percent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7887 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
7888
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7889 switch (cs->reason)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7890 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7891 case XmCR_DECREMENT:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7892 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7893 part = scroll_bar_up_arrow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7894 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7895
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7896 case XmCR_INCREMENT:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7897 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7898 part = scroll_bar_down_arrow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7899 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7900
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7901 case XmCR_PAGE_DECREMENT:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7902 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7903 part = scroll_bar_above_handle;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7904 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7905
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7906 case XmCR_PAGE_INCREMENT:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7907 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7908 part = scroll_bar_below_handle;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7909 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7910
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7911 case XmCR_TO_TOP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7912 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7913 part = scroll_bar_to_top;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7914 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7915
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7916 case XmCR_TO_BOTTOM:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7917 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7918 part = scroll_bar_to_bottom;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7919 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7920
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7921 case XmCR_DRAG:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7922 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7923 int slider_size;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7924 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
7925 && XINT (bar->dragging) <= cs->value);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7926
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7927 /* Get the slider size. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7928 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7929 XtVaGetValues (widget, XmNsliderSize, &slider_size, NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7930 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7931
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7932 /* 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
7933 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
7934 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
7935 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
7936 we have to do something.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7937
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7938 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
7939 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
7940 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
7941 a better slider behavior. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7942
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7943 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
7944 || (dragging_down_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7945 && 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
7946 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7947 part = scroll_bar_down_arrow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7948 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7949 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7950 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7951 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7952 whole = XM_SB_RANGE;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7953 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
7954 part = scroll_bar_handle;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7955 bar->dragging = make_number (cs->value);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7956 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7957 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7958 break;
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 case XmCR_VALUE_CHANGED:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7961 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7962 };
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7963
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7964 if (part >= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7965 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7966 window_being_scrolled = bar->window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7967 last_scroll_bar_part = part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7968 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
7969 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7970 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7971
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7972
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7973 #else /* !USE_MOTIF, i.e. Xaw. */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7974
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7975
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7976 /* Xaw scroll bar callback. Invoked when the thumb is dragged.
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7977 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
7978 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
7979 the thumb is. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7980
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7981 static void
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7982 xaw_jump_callback (widget, client_data, call_data)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7983 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7984 XtPointer client_data, call_data;
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 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
7987 float top = *(float *) call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7988 float shown;
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7989 int whole, portion, height;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7990 int part;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7992 /* 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
7993 BLOCK_INPUT;
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7994 XtVaGetValues (widget, XtNshown, &shown, XtNheight, &height, NULL);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7995 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7996
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7997 whole = 10000000;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7998 portion = shown < 1 ? top * whole : 0;
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7999
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8000 if (shown < 1 && (abs (top + shown - 1) < 1.0/height))
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8001 /* Some derivatives of Xaw refuse to shrink the thumb when you reach
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8002 the bottom, so we force the scrolling whenever we see that we're
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8003 too close to the bottom (in x_set_toolkit_scroll_bar_thumb
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8004 we try to ensure that we always stay two pixels away from the
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8005 bottom). */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8006 part = scroll_bar_down_arrow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8007 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8008 part = scroll_bar_handle;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8009
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8010 window_being_scrolled = bar->window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8011 bar->dragging = make_number (portion);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8012 last_scroll_bar_part = part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8013 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
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
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8017 /* Xaw scroll bar callback. Invoked for incremental scrolling.,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8018 i.e. line or page up or down. WIDGET is the Xaw scroll bar
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8019 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
8020 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
8021 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
8022 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
8023 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
8024
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8025 static void
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8026 xaw_scroll_callback (widget, client_data, call_data)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8027 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8028 XtPointer client_data, call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8029 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8030 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
8031 int position = (int) call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8032 Dimension height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8033 int part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8034
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8035 /* 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
8036 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8037 XtVaGetValues (widget, XtNheight, &height, NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8038 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8039
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8040 if (abs (position) >= height)
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8041 part = (position < 0) ? scroll_bar_above_handle : scroll_bar_below_handle;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8042
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8043 /* If Xaw3d was compiled with ARROW_SCROLLBAR,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8044 it maps line-movement to call_data = max(5, height/20). */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8045 else if (xaw3d_arrow_scroll && abs (position) <= max (5, height / 20))
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8046 part = (position < 0) ? scroll_bar_up_arrow : scroll_bar_down_arrow;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8047 else
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8048 part = scroll_bar_move_ratio;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8049
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8050 window_being_scrolled = bar->window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8051 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8052 last_scroll_bar_part = part;
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8053 x_send_scroll_bar_event (bar->window, part, position, height);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8054 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8055
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8056
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8057 #endif /* not USE_MOTIF */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8058
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8059
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8060 /* 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
8061 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
8062
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8063 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8064 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
8065 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8066 struct scroll_bar *bar;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8067 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8068 Window xwindow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8069 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8070 Arg av[20];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8071 int ac = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8072 char *scroll_bar_name = "verticalScrollBar";
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8073 unsigned long pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8074
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8075 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8076
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8077 #ifdef USE_MOTIF
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8078 /* LessTif 0.85, problems:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8079
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8080 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
8081 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
8082
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8083 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
8084 cursor (see below)? */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8085
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8086 /* Set resources. Create the widget. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8087 XtSetArg (av[ac], XtNmappedWhenManaged, False); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8088 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
8089 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
8090 XtSetArg (av[ac], XmNorientation, XmVERTICAL); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8091 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
8092 XtSetArg (av[ac], XmNincrement, 1); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8093 XtSetArg (av[ac], XmNpageIncrement, 1); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8094
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8095 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
8096 if (pixel != -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8097 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8098 XtSetArg (av[ac], XmNforeground, pixel);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8099 ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8100 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8101
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8102 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
8103 if (pixel != -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8104 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8105 XtSetArg (av[ac], XmNbackground, pixel);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8106 ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8107 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8108
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8109 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
8110 scroll_bar_name, av, ac);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8111
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8112 /* 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
8113 XtAddCallback (widget, XmNdecrementCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8114 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8115 XtAddCallback (widget, XmNdragCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8116 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8117 XtAddCallback (widget, XmNincrementCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8118 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8119 XtAddCallback (widget, XmNpageDecrementCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8120 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8121 XtAddCallback (widget, XmNpageIncrementCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8122 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8123 XtAddCallback (widget, XmNtoBottomCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8124 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8125 XtAddCallback (widget, XmNtoTopCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8126 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8127
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8128 /* 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
8129 XtRealizeWidget (widget);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8130
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8131 /* 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
8132 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
8133 XDefineCursor (XtDisplay (widget), XtWindow (widget),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8134 f->output_data.x->nontext_cursor);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8135
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8136 #else /* !USE_MOTIF i.e. use Xaw */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8137
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8138 /* 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
8139 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
8140 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
8141 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
8142 XtSetArg (av[ac], XtNmappedWhenManaged, False); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8143 XtSetArg (av[ac], XtNorientation, XtorientVertical); ++ac;
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8144 /* For smoother scrolling with Xaw3d -sm */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8145 /* XtSetArg (av[ac], XtNpickTop, True); ++ac; */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8146 /* XtSetArg (av[ac], XtNbeNiceToColormap, True); ++ac; */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8147
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8148 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
8149 if (pixel != -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8150 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8151 XtSetArg (av[ac], XtNforeground, pixel);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8152 ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8153 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8154
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8155 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
8156 if (pixel != -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8157 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8158 XtSetArg (av[ac], XtNbackground, pixel);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8159 ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8160 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8161
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8162 widget = XtCreateWidget (scroll_bar_name, scrollbarWidgetClass,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8163 f->output_data.x->edit_widget, av, ac);
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8164
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8165 {
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8166 char *initial = "";
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8167 char *val = initial;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8168 XtVaGetValues (widget, XtNscrollVCursor, (XtPointer) &val,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8169 XtNpickTop, (XtPointer) &xaw3d_pick_top, NULL);
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8170 if (val == initial)
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8171 { /* ARROW_SCROLL */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8172 xaw3d_arrow_scroll = True;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8173 /* Isn't that just a personal preference ? -sm */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8174 XtVaSetValues (widget, XtNcursorName, "top_left_arrow", NULL);
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8175 }
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8176 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8177
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8178 /* Define callbacks. */
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8179 XtAddCallback (widget, XtNjumpProc, xaw_jump_callback, (XtPointer) bar);
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8180 XtAddCallback (widget, XtNscrollProc, xaw_scroll_callback,
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8181 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8182
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8183 /* 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
8184 XtRealizeWidget (widget);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8185
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8186 #endif /* !USE_MOTIF */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8187
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8188 /* 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
8189 finishes interacting with a scroll bar. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8190 if (action_hook_id == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8191 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
8192
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8193 /* 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
8194 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
8195 xwindow = XtWindow (widget);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8196 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
8197
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8198 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8199 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8200
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8201
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8202 /* 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
8203 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
8204
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8205 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8206 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
8207 struct scroll_bar *bar;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8208 int portion, position, whole;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8209 {
33606
01f87b0ff56f (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
Gerd Moellmann <gerd@gnu.org>
parents: 33456
diff changeset
8210 struct frame *f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window)));
01f87b0ff56f (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
Gerd Moellmann <gerd@gnu.org>
parents: 33456
diff changeset
8211 Widget widget = SCROLL_BAR_X_WIDGET (FRAME_X_DISPLAY (f), bar);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8212 float top, shown;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8213
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8214 if (whole == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8215 top = 0, shown = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8216 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8217 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8218 top = (float) position / whole;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8219 shown = (float) portion / whole;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8220 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8221
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8222 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8223
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8224 #ifdef USE_MOTIF
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8225 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8226 int size, value;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8227 Boolean arrow1_selected, arrow2_selected;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8228 unsigned char flags;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8229 XmScrollBarWidget sb;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8230
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8231 /* Slider size. Must be in the range [1 .. MAX - MIN] where MAX
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8232 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
8233 value. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8234 size = shown * XM_SB_RANGE;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8235 size = min (size, XM_SB_RANGE);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8236 size = max (size, 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8237
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8238 /* 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
8239 value = top * XM_SB_RANGE;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8240 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
8241 value = max (value, XM_SB_MIN);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8242
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8243 /* 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
8244 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
8245 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
8246 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
8247 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
8248 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
8249
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8250 sb = (XmScrollBarWidget) widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8251 arrow1_selected = sb->scrollBar.arrow1_selected;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8252 arrow2_selected = sb->scrollBar.arrow2_selected;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8253 flags = sb->scrollBar.flags;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8254
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8255 if (NILP (bar->dragging))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8256 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
8257 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
8258 /* This has the negative side effect that the slider value is
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8259 not what it would be if we scrolled here using line-wise or
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8260 page-wise movement. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8261 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
8262 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8263 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8264 /* 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
8265 This reduces flicker effects. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8266 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
8267
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8268 XmScrollBarGetValues (widget, &old_value, &old_size,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8269 &increment, &page_increment);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8270 XmScrollBarSetValues (widget, old_value,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8271 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
8272 0, 0, False);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8273 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8274
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8275 sb->scrollBar.arrow1_selected = arrow1_selected;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8276 sb->scrollBar.arrow2_selected = arrow2_selected;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8277 sb->scrollBar.flags = flags;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8278 }
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8279 #else /* !USE_MOTIF i.e. use Xaw */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8280 {
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8281 float old_top, old_shown;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8282 Dimension height;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8283 XtVaGetValues (widget,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8284 XtNtopOfThumb, &old_top,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8285 XtNshown, &old_shown,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8286 XtNheight, &height,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8287 NULL);
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8288
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8289 /* Massage the top+shown values. */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8290 if (NILP (bar->dragging) || last_scroll_bar_part == scroll_bar_down_arrow)
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8291 top = max (0, min (1, top));
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8292 else
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8293 top = old_top;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8294 /* Keep two pixels available for moving the thumb down. */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8295 shown = max (0, min (1 - top - (2.0 / height), shown));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8296
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8297 /* 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
8298 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
8299 for `NARROWPROTO'. See s/freebsd.h for an example. */
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8300 if (top != old_top || shown != old_shown)
25101
6b42357f28f9 (x_set_toolkit_scroll_bar_thumb): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents: 25091
diff changeset
8301 {
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8302 if (NILP (bar->dragging))
25101
6b42357f28f9 (x_set_toolkit_scroll_bar_thumb): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents: 25091
diff changeset
8303 XawScrollbarSetThumb (widget, top, shown);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8304 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8305 {
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8306 #ifdef HAVE_XAW3D
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8307 ScrollbarWidget sb = (ScrollbarWidget) widget;
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
8308 int scroll_mode = 0;
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8309
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8310 /* `scroll_mode' only exists with Xaw3d + ARROW_SCROLLBAR. */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8311 if (xaw3d_arrow_scroll)
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8312 {
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8313 /* Xaw3d stupidly ignores resize requests while dragging
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8314 so we have to make it believe it's not in dragging mode. */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8315 scroll_mode = sb->scrollbar.scroll_mode;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8316 if (scroll_mode == 2)
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8317 sb->scrollbar.scroll_mode = 0;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8318 }
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8319 #endif
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8320 /* Try to make the scrolling a tad smoother. */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8321 if (!xaw3d_pick_top)
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8322 shown = min (shown, old_shown);
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8323
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8324 XawScrollbarSetThumb (widget, top, shown);
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8325
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8326 #ifdef HAVE_XAW3D
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8327 if (xaw3d_arrow_scroll && scroll_mode == 2)
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8328 sb->scrollbar.scroll_mode = scroll_mode;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8329 #endif
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8330 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8331 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8332 }
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8333 #endif /* !USE_MOTIF */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8334
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8335 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8336 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8337
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8338 #endif /* USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8339
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8340
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8341
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8342 /************************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8343 Scroll bars, general
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8344 ************************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8345
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8346 /* 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
8347 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
8348 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
8349 scroll bar. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8350
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8351 static struct scroll_bar *
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8352 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
8353 struct window *w;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8354 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
8355 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8356 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
8357 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
8358 = 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
8359
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8360 BLOCK_INPUT;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8361
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
8362 #ifdef USE_TOOLKIT_SCROLL_BARS
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8363 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
8364 #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
8365 {
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8366 XSetWindowAttributes a;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8367 unsigned long mask;
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8368 Window window;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8369
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8370 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
8371 if (a.background_pixel == -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8372 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
8373
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8374 a.event_mask = (ButtonPressMask | ButtonReleaseMask
1793
cf4c3f01ddb9 * xterm.c (x_scrollbar_create): Include PointerMotionHintMask in
Jim Blandy <jimb@redhat.com>
parents: 1787
diff changeset
8375 | ButtonMotionMask | PointerMotionHintMask
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8376 | ExposureMask);
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8377 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
8378
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8379 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
8380
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8381 /* 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
8382 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
8383 this case, no clear_frame is generated to reduce flickering. */
35581
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
8384 x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
8385 left, top, width,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
8386 window_box_height (w), False);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8387
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8388 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
8389 /* Position and size of scroll bar. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8390 left + VERTICAL_SCROLL_BAR_WIDTH_TRIM,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8391 top,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8392 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
8393 height,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8394 /* Border width, depth, class, and visual. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8395 0,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8396 CopyFromParent,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8397 CopyFromParent,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8398 CopyFromParent,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8399 /* Attributes. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8400 mask, &a);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8401 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
8402 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8403 #endif /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8404
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8405 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
8406 XSETINT (bar->top, top);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8407 XSETINT (bar->left, left);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8408 XSETINT (bar->width, width);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8409 XSETINT (bar->height, height);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8410 XSETINT (bar->start, 0);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8411 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
8412 bar->dragging = Qnil;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8413
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8414 /* 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
8415 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
8416 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
8417 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
8418 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
8419 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
8420
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8421 /* Map the window/widget. */
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
8422 #ifdef USE_TOOLKIT_SCROLL_BARS
33606
01f87b0ff56f (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
Gerd Moellmann <gerd@gnu.org>
parents: 33456
diff changeset
8423 {
01f87b0ff56f (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
Gerd Moellmann <gerd@gnu.org>
parents: 33456
diff changeset
8424 Widget scroll_bar = SCROLL_BAR_X_WIDGET (FRAME_X_DISPLAY (f), bar);
01f87b0ff56f (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
Gerd Moellmann <gerd@gnu.org>
parents: 33456
diff changeset
8425 XtConfigureWidget (scroll_bar,
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8426 left + VERTICAL_SCROLL_BAR_WIDTH_TRIM,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8427 top,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8428 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
8429 height, 0);
33606
01f87b0ff56f (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
Gerd Moellmann <gerd@gnu.org>
parents: 33456
diff changeset
8430 XtMapWidget (scroll_bar);
01f87b0ff56f (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
Gerd Moellmann <gerd@gnu.org>
parents: 33456
diff changeset
8431 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8432 #else /* not USE_TOOLKIT_SCROLL_BARS */
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
8433 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
8434 #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
8435
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8436 UNBLOCK_INPUT;
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8437 return bar;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8438 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8439
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8440
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8441 /* 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
8442
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8443 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
8444 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
8445 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
8446 events.)
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8447
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8448 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
8449 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
8450 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
8451 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
8452 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
8453
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8454 #ifndef USE_TOOLKIT_SCROLL_BARS
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8455
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8456 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8457 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
8458 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
8459 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
8460 int rebuild;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8461 {
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8462 int dragging = ! NILP (bar->dragging);
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8463 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
8464 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
8465 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
8466
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8467 /* 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
8468 if (! rebuild
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8469 && 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
8470 && 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
8471 return;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8472
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8473 BLOCK_INPUT;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8474
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8475 {
16251
ec1b1ae37295 Pass frame arg in calls to VERTICAL_SCROLL_BAR_INSIDE_HEIGHT
Richard M. Stallman <rms@gnu.org>
parents: 16220
diff changeset
8476 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
8477 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
8478 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
8479
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8480 /* 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
8481 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
8482 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8483 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
8484
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8485 if (start < 0)
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8486 start = 0;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8487 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
8488 start = top_range;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8489 end = start + length;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8490
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8491 if (end < start)
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8492 end = start;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8493 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
8494 end = top_range;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8495 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8496
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8497 /* 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
8498 XSETINT (bar->start, start);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8499 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
8500
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8501 /* 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
8502 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
8503 end = top_range;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8504
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8505 /* 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
8506 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
8507 that many pixels tall. */
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8508 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
8509
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8510 /* 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
8511 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
8512 if (0 < start)
35581
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
8513 x_clear_area (FRAME_X_DISPLAY (f), w,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
8514 /* x, y, width, height, and exposures. */
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
8515 VERTICAL_SCROLL_BAR_LEFT_BORDER,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
8516 VERTICAL_SCROLL_BAR_TOP_BORDER,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
8517 inside_width, start,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
8518 False);
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8519
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8520 /* 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
8521 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
8522 XSetForeground (FRAME_X_DISPLAY (f), gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8523 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
8524
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8525 /* 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
8526 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
8527
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8528 /* x, y, width, height */
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8529 VERTICAL_SCROLL_BAR_LEFT_BORDER,
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8530 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
8531 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
8532
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8533 /* 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
8534 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
8535 XSetForeground (FRAME_X_DISPLAY (f), gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8536 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
8537
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8538 /* 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
8539 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
8540 if (end < inside_height)
35581
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
8541 x_clear_area (FRAME_X_DISPLAY (f), w,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
8542 /* x, y, width, height, and exposures. */
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
8543 VERTICAL_SCROLL_BAR_LEFT_BORDER,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
8544 VERTICAL_SCROLL_BAR_TOP_BORDER + end,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
8545 inside_width, inside_height - end,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
8546 False);
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8547
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8548 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8549
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8550 UNBLOCK_INPUT;
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8551 }
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8552
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8553 #endif /* !USE_TOOLKIT_SCROLL_BARS */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8554
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8555 /* 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
8556 nil. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8557
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8558 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8559 x_scroll_bar_remove (bar)
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8560 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
8561 {
33606
01f87b0ff56f (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
Gerd Moellmann <gerd@gnu.org>
parents: 33456
diff changeset
8562 struct frame *f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window)));
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8563 BLOCK_INPUT;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8564
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
8565 #ifdef USE_TOOLKIT_SCROLL_BARS
33606
01f87b0ff56f (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
Gerd Moellmann <gerd@gnu.org>
parents: 33456
diff changeset
8566 XtDestroyWidget (SCROLL_BAR_X_WIDGET (FRAME_X_DISPLAY (f), bar));
01f87b0ff56f (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
Gerd Moellmann <gerd@gnu.org>
parents: 33456
diff changeset
8567 #else
01f87b0ff56f (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
Gerd Moellmann <gerd@gnu.org>
parents: 33456
diff changeset
8568 XDestroyWindow (FRAME_X_DISPLAY (f), SCROLL_BAR_X_WINDOW (bar));
01f87b0ff56f (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
Gerd Moellmann <gerd@gnu.org>
parents: 33456
diff changeset
8569 #endif
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8570
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8571 /* 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
8572 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
8573
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8574 UNBLOCK_INPUT;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8575 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8576
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8577
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8578 /* 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
8579 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
8580 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
8581 create one. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8582
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8583 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8584 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
8585 struct window *w;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8586 int portion, whole, position;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8587 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8588 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
8589 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
8590 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
8591 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
8592
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8593 /* Get window dimensions. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8594 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
8595 top = window_y;
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8596 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
8597 height = window_height;
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8598
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8599 /* 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
8600 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
8601 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
8602 else
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8603 left = XFASTINT (w->left);
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8604 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
8605 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
8606
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8607 /* 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
8608 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
8609 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
8610 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
8611 else
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8612 sb_width = width;
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8613
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8614 /* 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
8615 #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
8616 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
8617 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
8618 else
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8619 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
8620 #else
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8621 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
8622 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
8623 else
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8624 sb_left = left;
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8625 #endif
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8626
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8627 /* 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
8628 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
8629 {
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
8630 BLOCK_INPUT;
35581
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
8631 x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
8632 left, top, width, height, False);
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
8633 UNBLOCK_INPUT;
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8634 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
8635 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8636 else
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8637 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8638 /* 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
8639 unsigned int mask = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8640
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8641 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
8642
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8643 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8644
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8645 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
8646 mask |= CWX;
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8647 if (top != XINT (bar->top))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8648 mask |= CWY;
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8649 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
8650 mask |= CWWidth;
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8651 if (height != XINT (bar->height))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8652 mask |= CWHeight;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8653
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8654 #ifdef USE_TOOLKIT_SCROLL_BARS
25269
621067279f19 (XTset_vertical_scroll_bar) [USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 25191
diff changeset
8655
621067279f19 (XTset_vertical_scroll_bar) [USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 25191
diff changeset
8656 /* 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
8657 for them on the frame, we have to clear "under" them. */
35581
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
8658 x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
8659 left, top, width, height, False);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8660
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8661 /* Move/size the scroll bar widget. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8662 if (mask)
33606
01f87b0ff56f (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
Gerd Moellmann <gerd@gnu.org>
parents: 33456
diff changeset
8663 XtConfigureWidget (SCROLL_BAR_X_WIDGET (FRAME_X_DISPLAY (f), bar),
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8664 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
8665 top,
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8666 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
8667 height, 0);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8668
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8669 #else /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8670
25633
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
8671 if (VERTICAL_SCROLL_BAR_WIDTH_TRIM)
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
8672 {
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
8673 /* 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
8674 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
8675 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
8676 reserved for scroll bars - trim at both sides. */
35581
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
8677 x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
8678 left, top, VERTICAL_SCROLL_BAR_WIDTH_TRIM,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
8679 height, False);
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
8680 x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
8681 left + width - VERTICAL_SCROLL_BAR_WIDTH_TRIM,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
8682 top, VERTICAL_SCROLL_BAR_WIDTH_TRIM,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
8683 height, False);
25633
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
8684 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8685
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8686 /* Move/size the scroll bar window. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8687 if (mask)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8688 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8689 XWindowChanges wc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8690
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8691 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
8692 wc.y = top;
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8693 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
8694 wc.height = height;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8695 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
8696 mask, &wc);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8697 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8698
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8699 #endif /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8700
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8701 /* Remember new settings. */
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8702 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
8703 XSETINT (bar->top, top);
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8704 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
8705 XSETINT (bar->height, height);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8706
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8707 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8708 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8709
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
8710 #ifdef USE_TOOLKIT_SCROLL_BARS
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8711 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
8712 #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
8713 /* 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
8714 dragged. */
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8715 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
8716 {
25541
be975dcf4a0c (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 25529
diff changeset
8717 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
8718
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8719 if (whole == 0)
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8720 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
8721 else
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8722 {
3686
910ea1d66bfd * xterm.c (XTset_vertical_scroll_bar): Use double type for
Jim Blandy <jimb@redhat.com>
parents: 3683
diff changeset
8723 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
8724 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
8725 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
8726 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8727 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8728 #endif /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8729
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8730 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
8731 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8732
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8733
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8734 /* 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
8735 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
8736 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
8737 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
8738 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
8739 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
8740 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
8741
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8742 /* 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
8743 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
8744 `*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
8745
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
8746 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8747 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
8748 FRAME_PTR frame;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8749 {
13205
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
8750 /* 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
8751 while (! NILP (FRAME_SCROLL_BARS (frame)))
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
8752 {
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
8753 Lisp_Object bar;
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
8754 bar = FRAME_SCROLL_BARS (frame);
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
8755 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
8756 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
8757 XSCROLL_BAR (bar)->prev = Qnil;
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
8758 if (! NILP (FRAME_CONDEMNED_SCROLL_BARS (frame)))
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
8759 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
8760 FRAME_CONDEMNED_SCROLL_BARS (frame) = bar;
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
8761 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8762 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8763
33303
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8764
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8765 /* 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
8766 Note that WINDOW isn't necessarily condemned at all. */
33303
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8767
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8768 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8769 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
8770 struct window *window;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8771 {
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8772 struct scroll_bar *bar;
33303
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8773 struct frame *f;
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8774
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8775 /* 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
8776 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
8777 abort ();
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8778
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8779 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
8780
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8781 /* Unlink it from the condemned list. */
33303
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8782 f = XFRAME (WINDOW_FRAME (window));
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8783 if (NILP (bar->prev))
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8784 {
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8785 /* If the prev pointer is nil, it must be the first in one of
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8786 the lists. */
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8787 if (EQ (FRAME_SCROLL_BARS (f), window->vertical_scroll_bar))
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8788 /* It's not condemned. Everything's fine. */
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8789 return;
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8790 else if (EQ (FRAME_CONDEMNED_SCROLL_BARS (f),
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8791 window->vertical_scroll_bar))
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8792 FRAME_CONDEMNED_SCROLL_BARS (f) = bar->next;
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8793 else
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8794 /* If its prev pointer is nil, it must be at the front of
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8795 one or the other! */
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8796 abort ();
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8797 }
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8798 else
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8799 XSCROLL_BAR (bar->prev)->next = bar->next;
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8800
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8801 if (! NILP (bar->next))
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8802 XSCROLL_BAR (bar->next)->prev = bar->prev;
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8803
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8804 bar->next = FRAME_SCROLL_BARS (f);
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8805 bar->prev = Qnil;
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8806 XSETVECTOR (FRAME_SCROLL_BARS (f), bar);
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8807 if (! NILP (bar->next))
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
8808 XSETVECTOR (XSCROLL_BAR (bar->next)->prev, bar);
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8809 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8810
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8811 /* 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
8812 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
8813
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8814 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8815 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
8816 FRAME_PTR f;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8817 {
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8818 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
8819
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8820 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
8821
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
8822 /* 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
8823 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
8824 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
8825
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
8826 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
8827 {
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8828 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
8829
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8830 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
8831
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8832 next = b->next;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8833 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
8834 }
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8835
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8836 /* 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
8837 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
8838 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8839
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8840
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8841 /* 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
8842 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
8843
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8844 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
8845 mark bits. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8846
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8847 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8848 x_scroll_bar_expose (bar, event)
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8849 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
8850 XEvent *event;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8851 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8852 #ifndef USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8853
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8854 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
8855 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
8856 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
8857 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
8858
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8859 BLOCK_INPUT;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8860
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8861 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
8862
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8863 /* 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
8864 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
8865
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8866 /* 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
8867 0, 0,
16301
a02555b4b2b9 (x_scroll_bar_create, x_scroll_bar_move):
Richard M. Stallman <rms@gnu.org>
parents: 16251
diff changeset
8868 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
8869 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
8870
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8871 UNBLOCK_INPUT;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8872
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8873 #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
8874 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8875
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8876 /* 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
8877 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
8878
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8879 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
8880 mark bits. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8881
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8882 #ifndef USE_TOOLKIT_SCROLL_BARS
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8883
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8884 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8885 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
8886 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
8887 XEvent *event;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8888 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
8889 {
10287
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
8890 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
8891 abort ();
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8892
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8893 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
8894 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
8895 emacs_event->modifiers
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
8896 = (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
8897 (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
8898 event->xbutton.state)
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
8899 | (event->type == ButtonRelease
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
8900 ? up_modifier
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
8901 : down_modifier));
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8902 emacs_event->frame_or_window = bar->window;
30197
3237a5529020 (construct_mouse_click, x_scroll_bar_to_input_event)
Gerd Moellmann <gerd@gnu.org>
parents: 30182
diff changeset
8903 emacs_event->arg = Qnil;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8904 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
8905 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8906 #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
8907 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
8908 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
8909 = 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
8910 #endif
10287
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
8911 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
8912 = 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
8913 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
8914
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8915 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
8916 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
8917
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8918 if (y < XINT (bar->start))
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8919 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
8920 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
8921 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
8922 else
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8923 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
8924
5440f00480e6 * xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents: 2923
diff changeset
8925 /* 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
8926 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
8927 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
8928 #if 0
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8929 /* 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
8930 holding it. */
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8931 if (event->type == ButtonPress
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8932 && 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
8933 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
8934 #endif
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8935
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8936 /* 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
8937 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
8938 && ! NILP (bar->dragging))
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8939 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8940 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
8941 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
8942
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8943 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
8944 bar->dragging = Qnil;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8945 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8946
2958
3124e6244d1a * xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents: 2953
diff changeset
8947 /* 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
8948 #if 0
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
8949 /* 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
8950 the handle. */
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8951 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
8952 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
8953 else
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8954 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
8955 #else
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8956 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
8957 #endif
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8958
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8959 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
8960 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8961 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8962
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8963 /* 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
8964
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8965 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
8966 mark bits. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8967
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8968 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8969 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
8970 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
8971 XEvent *event;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8972 {
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
8973 FRAME_PTR f = XFRAME (XWINDOW (bar->window)->frame);
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
8974
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8975 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
8976
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
8977 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
8978 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
8979
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8980 /* 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
8981 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
8982 {
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8983 /* 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
8984 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
8985
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8986 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
8987 {
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8988 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
8989
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8990 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
8991 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8992 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8993 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8994
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8995 #endif /* !USE_TOOLKIT_SCROLL_BARS */
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8996
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8997 /* 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
8998 on the scroll bar. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8999
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9000 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
9001 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
9002 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
9003 Lisp_Object *bar_window;
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9004 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
9005 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
9006 unsigned long *time;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9007 {
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9008 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
9009 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
9010 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
9011 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
9012 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
9013 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
9014 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
9015
1803
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
9016 BLOCK_INPUT;
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
9017
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9018 /* 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
9019 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
9020 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
9021
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
9022 /* 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
9023 &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
9024 &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
9025
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
9026 /* 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
9027 &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
9028
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
9029 /* 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
9030 &dummy_mask))
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9031 ;
2982
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
9032 else
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
9033 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9034 #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
9035 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
9036 = 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
9037 #endif
2982
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
9038 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
9039 = 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
9040
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
9041 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
9042
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
9043 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
9044 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
9045
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
9046 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
9047 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
9048 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
9049 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
9050
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
9051 *fp = f;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9052 *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
9053
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
9054 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
9055 *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
9056 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
9057 *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
9058 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
9059 *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
9060 else
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
9061 *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
9062
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
9063 XSETINT (*x, win_y);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
9064 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
9065
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
9066 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
9067 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
9068 }
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
9069
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
9070 *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
9071
1803
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
9072 UNBLOCK_INPUT;
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9073 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9074
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9075
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
9076 /* 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
9077 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
9078 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
9079 redraw them. */
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
9080
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
9081 void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9082 x_scroll_bar_clear (f)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
9083 FRAME_PTR f;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
9084 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9085 #ifndef USE_TOOLKIT_SCROLL_BARS
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
9086 Lisp_Object bar;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
9087
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
9088 /* 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
9089 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
9090 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
9091 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
9092 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
9093 bar = XSCROLL_BAR (bar)->next)
35581
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
9094 XClearArea (FRAME_X_DISPLAY (f),
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
9095 SCROLL_BAR_X_WINDOW (XSCROLL_BAR (bar)),
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
9096 0, 0, 0, 0, True);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9097 #endif /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9098 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9099
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9100 /* 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
9101 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
9102 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
9103
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9104 int
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9105 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
9106 XEvent event;
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9107 {
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9108 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
9109 struct x_display_info *dpyinfo;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9110 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
9111
5872
6389c826f847 (x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents: 5825
diff changeset
9112 BLOCK_INPUT;
6389c826f847 (x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents: 5825
diff changeset
9113
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
9114 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
9115 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
9116 if (f)
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9117 {
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9118 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
9119 {
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9120 f->async_visible = 1;
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9121 f->async_iconified = 0;
18074
06e42aa4c208 (process_expose_from_menu, XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 18057
diff changeset
9122 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
9123 SET_FRAME_GARBAGED (f);
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9124 }
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9125 else
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9126 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9127 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
9128 event.xexpose.x, event.xexpose.y,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9129 event.xexpose.width, event.xexpose.height);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9130 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
9131 }
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9132 }
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9133 else
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9134 {
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9135 struct scroll_bar *bar
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9136 = x_window_to_scroll_bar (event.xexpose.window);
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
9137
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9138 if (bar)
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9139 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
9140 }
5872
6389c826f847 (x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents: 5825
diff changeset
9141
6389c826f847 (x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents: 5825
diff changeset
9142 UNBLOCK_INPUT;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9143 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
9144 }
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9145
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9146 /* 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
9147
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9148 struct selection_event_queue
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9149 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9150 XEvent event;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9151 struct selection_event_queue *next;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9152 };
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9153
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9154 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
9155
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9156 /* 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
9157
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9158 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
9159
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9160 /* 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
9161
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9162 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
9163 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
9164 FRAME_PTR f;
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9165 XEvent *event;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9166 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9167 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
9168 = (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
9169
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
9170 if (queue_tmp != NULL)
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9171 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9172 queue_tmp->event = *event;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9173 queue_tmp->next = queue;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9174 queue = queue_tmp;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9175 }
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9176 }
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9177
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9178 /* 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
9179 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
9180
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9181 static void
10634
de7beeb9f02c (x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents: 10609
diff changeset
9182 x_unqueue_events (display)
de7beeb9f02c (x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents: 10609
diff changeset
9183 Display *display;
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9184 {
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
9185 while (queue != NULL)
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9186 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9187 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
9188 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
9189 queue = queue_tmp->next;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9190 xfree ((char *)queue_tmp);
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9191 }
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9192 }
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9193
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9194 /* Start queuing SelectionRequest events. */
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9195
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9196 void
10634
de7beeb9f02c (x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents: 10609
diff changeset
9197 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
9198 Display *display;
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9199 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9200 x_queue_selection_requests++;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9201 }
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9202
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9203 /* Stop queuing SelectionRequest events. */
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9204
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9205 void
10634
de7beeb9f02c (x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents: 10609
diff changeset
9206 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
9207 Display *display;
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9208 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9209 x_queue_selection_requests--;
10634
de7beeb9f02c (x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents: 10609
diff changeset
9210 x_unqueue_events (display);
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9211 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9212
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9213 /* The main X event-reading loop - XTread_socket. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9214
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9215 /* Time stamp of enter window event. This is only used by XTread_socket,
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9216 but we have to put it out here, since static variables within functions
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9217 sometimes don't work. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9218
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9219 static Time enter_timestamp;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9220
1436
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
9221 /* 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
9222 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
9223 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
9224 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
9225
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
9226 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
9227 given for enter_time stamp, above. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9228
1436
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
9229 static XComposeStatus compose_status;
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
9230
2064
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
9231 /* Record the last 100 characters stored
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
9232 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
9233
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
9234 static int temp_index;
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
9235 static short temp_buffer[100];
2064
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
9236
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9237 /* 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
9238 on a particular display. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9239
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9240 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
9241
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
9242 /* 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
9243 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
9244 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
9245 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
9246
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
9247 static struct x_display_info *next_noop_dpyinfo;
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
9248
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9249 #define SET_SAVED_MENU_EVENT(size) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9250 do \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9251 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9252 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
9253 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
9254 = (XEvent *) xmalloc (sizeof (XEvent)); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9255 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
9256 if (numchars >= 1) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9257 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9258 bufp->kind = menu_bar_activate_event; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9259 XSETFRAME (bufp->frame_or_window, f); \
30197
3237a5529020 (construct_mouse_click, x_scroll_bar_to_input_event)
Gerd Moellmann <gerd@gnu.org>
parents: 30182
diff changeset
9260 bufp->arg = Qnil; \
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9261 bufp++; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9262 count++; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9263 numchars--; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9264 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9265 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9266 while (0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9267
15711
099dc465c948 (SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents: 15639
diff changeset
9268 #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
9269 #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
9270
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9271 /* Read events coming from the X server.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9272 This routine is called by the SIGIO handler.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9273 We return as soon as there are no more events to be read.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9274
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9275 Events representing keys are stored in buffer BUFP,
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9276 which can hold up to NUMCHARS characters.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9277 We return the number of characters stored into the buffer,
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9278 thus pretending to be `read'.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9279
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9280 EXPECTED is nonzero if the caller knows input is available. */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9281
1530
a7f8a1fe258e * xterm.c (x_convert_modifiers): Declare this to return an
Jim Blandy <jimb@redhat.com>
parents: 1436
diff changeset
9282 int
16330
e4d9d77012bc (XTread_socket): Delete WAITP arg.
Richard M. Stallman <rms@gnu.org>
parents: 16301
diff changeset
9283 XTread_socket (sd, bufp, numchars, expected)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9284 register int sd;
15711
099dc465c948 (SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents: 15639
diff changeset
9285 /* register */ struct input_event *bufp;
099dc465c948 (SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents: 15639
diff changeset
9286 /* register */ int numchars;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9287 int expected;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9288 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9289 int count = 0;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9290 int nbytes = 0;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9291 XEvent event;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
9292 struct frame *f;
3938
83d870a52936 * xterm.c (XTread_socket): Initialize event_found to zero, and
Jim Blandy <jimb@redhat.com>
parents: 3924
diff changeset
9293 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
9294 struct x_display_info *dpyinfo;
30748
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9295 struct coding_system coding;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9296
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2353
diff changeset
9297 if (interrupt_input_blocked)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9298 {
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2353
diff changeset
9299 interrupt_input_pending = 1;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9300 return -1;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9301 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9302
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2353
diff changeset
9303 interrupt_input_pending = 0;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9304 BLOCK_INPUT;
9337
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
9305
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
9306 /* 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
9307 input_signal_count++;
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
9308
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9309 if (numchars <= 0)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9310 abort (); /* Don't think this happens. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9311
30083
998d20abc885 (XTread_socket): Increment handling_signal at the start,
Gerd Moellmann <gerd@gnu.org>
parents: 30050
diff changeset
9312 ++handling_signal;
998d20abc885 (XTread_socket): Increment handling_signal at the start,
Gerd Moellmann <gerd@gnu.org>
parents: 30050
diff changeset
9313
30748
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9314 /* The input should be decoded if it is from XIM. Currently the
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9315 locale of XIM is the same as that of the system. So, we can use
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9316 Vlocale_coding_system which is initialized properly at Emacs
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9317 startup time. */
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9318 setup_coding_system (Vlocale_coding_system, &coding);
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9319 coding.src_multibyte = 0;
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9320 coding.dst_multibyte = 1;
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9321 /* The input is converted to events, thus we can't handle
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9322 composition. Anyway, there's no XIM that gives us composition
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9323 information. */
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9324 coding.composing = COMPOSITION_DISABLED;
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9325
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9326 /* 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
9327 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
9328 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
9329 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9330 #if 0 /* This ought to be unnecessary; let's verify it. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9331 #ifdef FIOSNBIO
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9332 /* 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
9333 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
9334 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
9335 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
9336 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
9337 #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
9338 #endif
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9339
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9340 #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
9341 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
9342 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
9343 for X connections. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9344 #ifndef SIGIO
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9345 #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
9346 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
9347 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9348 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
9349 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
9350 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
9351 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
9352 }
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
9353 #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
9354 #endif /* SIGIO */
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9355 #endif
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9356
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9357 /* 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
9358 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
9359 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9360 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
9361 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
9362 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9363
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9364 while (XPending (dpyinfo->display))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9365 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9366 XNextEvent (dpyinfo->display, &event);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9367
15973
6ad9e8fee494 (XTread_socket): Call XFilterEvent on all events,
Richard M. Stallman <rms@gnu.org>
parents: 15928
diff changeset
9368 #ifdef HAVE_X_I18N
15990
1185f8fc0bfb (do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents: 15973
diff changeset
9369 {
26968
3039d2412c9e (XTread_socket): At the beginning of the loop, pass the
Gerd Moellmann <gerd@gnu.org>
parents: 26912
diff changeset
9370 /* Filter events for the current X input method.
3039d2412c9e (XTread_socket): At the beginning of the loop, pass the
Gerd Moellmann <gerd@gnu.org>
parents: 26912
diff changeset
9371 XFilterEvent returns non-zero if the input method has
3039d2412c9e (XTread_socket): At the beginning of the loop, pass the
Gerd Moellmann <gerd@gnu.org>
parents: 26912
diff changeset
9372 consumed the event. We pass the frame's X window to
3039d2412c9e (XTread_socket): At the beginning of the loop, pass the
Gerd Moellmann <gerd@gnu.org>
parents: 26912
diff changeset
9373 XFilterEvent because that's the one for which the IC
3039d2412c9e (XTread_socket): At the beginning of the loop, pass the
Gerd Moellmann <gerd@gnu.org>
parents: 26912
diff changeset
9374 was created. */
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9375 struct frame *f1 = x_any_window_to_frame (dpyinfo,
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9376 event.xclient.window);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9377 if (XFilterEvent (&event, f1 ? FRAME_X_WINDOW (f1) : None))
15990
1185f8fc0bfb (do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents: 15973
diff changeset
9378 break;
1185f8fc0bfb (do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents: 15973
diff changeset
9379 }
15973
6ad9e8fee494 (XTread_socket): Call XFilterEvent on all events,
Richard M. Stallman <rms@gnu.org>
parents: 15928
diff changeset
9380 #endif
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9381 event_found = 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9382
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9383 switch (event.type)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9384 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9385 case ClientMessage:
642
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
9386 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9387 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
9388 == 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
9389 && event.xclient.format == 32)
642
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
9390 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9391 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
9392 == 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
9393 {
18885
f7b6579204b8 (XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents: 18775
diff changeset
9394 /* Use x_any_window_to_frame because this
f7b6579204b8 (XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents: 18775
diff changeset
9395 could be the shell widget window
f7b6579204b8 (XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents: 18775
diff changeset
9396 if the frame has no title bar. */
f7b6579204b8 (XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents: 18775
diff changeset
9397 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
9398 #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
9399 /* Not quite sure this is needed -pd */
18885
f7b6579204b8 (XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents: 18775
diff changeset
9400 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
9401 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
9402 #endif
25921
eb5839cbfb16 (XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents: 25795
diff changeset
9403 #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
9404 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
9405 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
9406 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
9407 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
9408 needed.
eb5839cbfb16 (XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents: 25795
diff changeset
9409
eb5839cbfb16 (XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents: 25795
diff changeset
9410 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
9411 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
9412 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
9413 below can generate additional FocusIn events which confuse
eb5839cbfb16 (XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents: 25795
diff changeset
9414 Emacs. */
eb5839cbfb16 (XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents: 25795
diff changeset
9415
18996
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9416 /* 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
9417 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
9418 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
9419 if (f)
18996
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9420 {
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9421 Display *d = event.xclient.display;
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9422 /* 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
9423 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
9424 int count = x_catch_errors (d);
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9425 XSetInputFocus (d, event.xclient.window,
25633
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
9426 /* The ICCCM says this is
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
9427 the only valid choice. */
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
9428 RevertToParent,
18996
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9429 event.xclient.data.l[1]);
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9430 /* 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
9431 if there is an error. */
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9432 XSync (d, False);
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9433 x_uncatch_errors (d, count);
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9434 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9435 /* Not certain about handling scroll bars here */
25921
eb5839cbfb16 (XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents: 25795
diff changeset
9436 #endif /* 0 */
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9437 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9438 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
9439 == dpyinfo->Xatom_wm_save_yourself)
642
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
9440 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9441 /* 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
9442 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
9443 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
9444 PropertyNotify. Can restart processing when
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9445 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
9446 if (numchars > 0)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9447 {
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
9448 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
9449 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
9450
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9451 /* 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
9452 for a single Emacs process. */
25682
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
9453 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
9454 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
9455 event.xclient.window,
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9456 initial_argv, initial_argc);
15519
045a36502ad4 (XTread_socket, Xatom_wm_save_yourself clause):
Richard M. Stallman <rms@gnu.org>
parents: 15515
diff changeset
9457 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
9458 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
9459 event.xclient.window,
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9460 0, 0);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9461 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9462 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9463 else 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
9464 == 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
9465 {
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
9466 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
9467 = 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
9468 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
9469
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9470 if (f)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9471 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9472 if (numchars == 0)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9473 abort ();
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9474
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9475 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
9476 XSETFRAME (bufp->frame_or_window, f);
30197
3237a5529020 (construct_mouse_click, x_scroll_bar_to_input_event)
Gerd Moellmann <gerd@gnu.org>
parents: 30182
diff changeset
9477 bufp->arg = Qnil;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9478 bufp++;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9479
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9480 count += 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9481 numchars -= 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9482 }
642
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
9483 }
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
9484 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9485 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
9486 == dpyinfo->Xatom_wm_configure_denied)
642
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
9487 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9488 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9489 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
9490 == 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
9491 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9492 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
9493 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
9494 = 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
9495
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9496 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
9497 new_y = event.xclient.data.s[1];
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
9498
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
9499 if (f)
5156
fd78458b8c43 (XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents: 5018
diff changeset
9500 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
9501 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
9502 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
9503 }
642
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
9504 }
13507
9a9f459075af (HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
9505 #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
9506 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
9507 == dpyinfo->Xatom_editres)
5156
fd78458b8c43 (XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents: 5018
diff changeset
9508 {
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
9509 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
9510 = 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
9511 _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
9512 &event, NULL);
5156
fd78458b8c43 (XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents: 5018
diff changeset
9513 }
13507
9a9f459075af (HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
9514 #endif /* HACK_EDITRES */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9515 else if ((event.xclient.message_type
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9516 == dpyinfo->Xatom_DONE)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9517 || (event.xclient.message_type
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9518 == dpyinfo->Xatom_PAGE))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9519 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9520 /* 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
9521 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
9522 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
9523 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
9524 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
9525 struct frame *f
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9526 = 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
9527 x_kill_gs_process (pixmap, f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9528 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
9529 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9530 #ifdef USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9531 /* 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
9532 we construct an input_event. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9533 else if (event.xclient.message_type
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9534 == dpyinfo->Xatom_Scrollbar)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9535 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9536 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
9537 ++bufp, ++count, --numchars;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9538 goto out;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9539 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9540 #endif /* USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9541 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9542 goto OTHER;
642
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
9543 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9544 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9545
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9546 case SelectionNotify:
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9547 #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
9548 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
9549 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9550 #endif /* not USE_X_TOOLKIT */
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
9551 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
9552 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9553
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9554 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
9555 #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
9556 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
9557 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9558 #endif /* USE_X_TOOLKIT */
6941
a914781ef58a (Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents: 6934
diff changeset
9559 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9560 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
9561
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9562 if (numchars == 0)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9563 abort ();
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9564
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9565 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
9566 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
9567 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
9568 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
9569 bufp->frame_or_window = Qnil;
30197
3237a5529020 (construct_mouse_click, x_scroll_bar_to_input_event)
Gerd Moellmann <gerd@gnu.org>
parents: 30182
diff changeset
9570 bufp->arg = Qnil;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9571 bufp++;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9572
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9573 count += 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9574 numchars -= 1;
6941
a914781ef58a (Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents: 6934
diff changeset
9575 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9576 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9577
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9578 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
9579 #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
9580 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
9581 goto OTHER;
6984
8e9465c13702 (XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents: 6983
diff changeset
9582 #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
9583 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
9584 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
9585 &event);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9586 else
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9587 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9588 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
9589
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9590 if (numchars == 0)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9591 abort ();
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 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
9594 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
9595 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
9596 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
9597 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
9598 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
9599 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
9600 bufp->frame_or_window = Qnil;
30197
3237a5529020 (construct_mouse_click, x_scroll_bar_to_input_event)
Gerd Moellmann <gerd@gnu.org>
parents: 30182
diff changeset
9601 bufp->arg = Qnil;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9602 bufp++;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9603
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9604 count += 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9605 numchars -= 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9606 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9607 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9608
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9609 case PropertyNotify:
6984
8e9465c13702 (XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents: 6983
diff changeset
9610 #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
9611 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
9612 goto OTHER;
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9613 #endif /* not USE_X_TOOLKIT */
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
9614 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
9615 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9616
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9617 case 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
9618 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
9619 if (f)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9620 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9621 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
9622 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
9623 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
9624 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
9625 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
9626 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9627 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9628
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9629 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
9630 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
9631 if (f)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9632 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9633 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
9634 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9635 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
9636 f->async_iconified = 0;
18074
06e42aa4c208 (process_expose_from_menu, XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 18057
diff changeset
9637 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
9638 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
9639 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9640 else
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9641 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
9642 event.xexpose.window),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9643 event.xexpose.x, event.xexpose.y,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9644 event.xexpose.width, event.xexpose.height);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9645 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9646 else
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9647 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9648 #ifdef USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9649 /* Dispatch event to the widget. */
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 #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
9652 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
9653 = 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
9654
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9655 if (bar)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9656 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
9657 #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
9658 else
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9659 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9660 #endif /* USE_X_TOOLKIT */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9661 #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
9662 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9663 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9664
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9665 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
9666 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
9667 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
9668 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
9669 if (f)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9670 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9671 expose_frame (f,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9672 event.xgraphicsexpose.x, event.xgraphicsexpose.y,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9673 event.xgraphicsexpose.width,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9674 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
9675 }
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9676 #ifdef USE_X_TOOLKIT
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9677 else
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9678 goto OTHER;
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9679 #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
9680 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9681
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9682 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
9683 source area was completely
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9684 available */
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9685 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9686
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9687 case UnmapNotify:
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9688 /* 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
9689 if (event.xmap.window == tip_window)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9690 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9691 tip_window = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9692 redo_mouse_highlight ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9693 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9694
12750
7e5276da6270 (XTread_socket): For UnmapNotify, use x_top_window_to_frame.
Richard M. Stallman <rms@gnu.org>
parents: 12667
diff changeset
9695 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
9696 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
9697 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
9698 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9699 /* 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
9700 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
9701 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
9702 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
9703 /* 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
9704 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
9705 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
9706 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
9707 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
9708 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
9709 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
9710 {
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
9711 f->async_iconified = 1;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
9712
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
9713 bufp->kind = iconify_event;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
9714 XSETFRAME (bufp->frame_or_window, f);
30197
3237a5529020 (construct_mouse_click, x_scroll_bar_to_input_event)
Gerd Moellmann <gerd@gnu.org>
parents: 30182
diff changeset
9715 bufp->arg = Qnil;
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
9716 bufp++;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
9717 count++;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
9718 numchars--;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
9719 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9720 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9721 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9722
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9723 case MapNotify:
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9724 if (event.xmap.window == tip_window)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9725 /* 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
9726 the SET_FRAME_GARBAGED below. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9727 goto OTHER;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9728
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9729 /* 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
9730 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
9731 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
9732 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
9733 if (f)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9734 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9735 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
9736 f->async_iconified = 0;
18074
06e42aa4c208 (process_expose_from_menu, XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 18057
diff changeset
9737 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
9738
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9739 /* 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
9740 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
9741 SET_FRAME_GARBAGED (f);
9823
e6dbda62fd61 (XTread_socket): Generate iconify and deiconify events.
Karl Heuer <kwzh@gnu.org>
parents: 9763
diff changeset
9742
11348
e366abc2c753 (XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents: 11259
diff changeset
9743 if (f->iconified)
e366abc2c753 (XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents: 11259
diff changeset
9744 {
e366abc2c753 (XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents: 11259
diff changeset
9745 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
9746 XSETFRAME (bufp->frame_or_window, f);
30197
3237a5529020 (construct_mouse_click, x_scroll_bar_to_input_event)
Gerd Moellmann <gerd@gnu.org>
parents: 30182
diff changeset
9747 bufp->arg = Qnil;
11348
e366abc2c753 (XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents: 11259
diff changeset
9748 bufp++;
e366abc2c753 (XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents: 11259
diff changeset
9749 count++;
e366abc2c753 (XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents: 11259
diff changeset
9750 numchars--;
e366abc2c753 (XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents: 11259
diff changeset
9751 }
17519
5aa7011aa3d5 (x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents: 17371
diff changeset
9752 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
9753 && ! NILP (XCDR (Vframe_list)))
11921
6ecaa3fac4e4 (XTread_socket): For MapNotify, call record_asynch_buffer_change.
Karl Heuer <kwzh@gnu.org>
parents: 11915
diff changeset
9754 /* 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
9755 to update the frame titles
6ecaa3fac4e4 (XTread_socket): For MapNotify, call record_asynch_buffer_change.
Karl Heuer <kwzh@gnu.org>
parents: 11915
diff changeset
9756 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
9757 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
9758 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9759 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9760
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9761 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
9762 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
9763
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
9764 #if defined USE_MOTIF && defined USE_TOOLKIT_SCROLL_BARS
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9765 /* 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
9766 from consuming key events. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9767 if (f == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9768 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9769 Widget widget = XtWindowToWidget (dpyinfo->display,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9770 event.xkey.window);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9771 if (widget && XmIsScrollBar (widget))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9772 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9773 widget = XtParent (widget);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9774 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
9775 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9776 }
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
9777 #endif /* USE_MOTIF and USE_TOOLKIT_SCROLL_BARS */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9778
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9779 if (f != 0)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9780 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9781 KeySym keysym, orig_keysym;
30748
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9782 /* al%imercury@uunet.uu.net says that making this 81
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9783 instead of 80 fixed a bug whereby meta chars made
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9784 his Emacs hang.
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9785
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9786 It seems that some version of XmbLookupString has
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9787 a bug of not returning XBufferOverflow in
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9788 status_return even if the input is too long to
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9789 fit in 81 bytes. So, we must prepare sufficient
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9790 bytes for copy_buffer. 513 bytes (256 chars for
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9791 two-byte character set) seems to be a faily good
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9792 approximation. -- 2000.8.10 handa@etl.go.jp */
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9793 unsigned char copy_buffer[513];
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9794 unsigned char *copy_bufptr = copy_buffer;
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9795 int copy_bufsiz = sizeof (copy_buffer);
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9796 int modifiers;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9797
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9798 event.xkey.state
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9799 |= 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
9800 extra_keyboard_modifiers);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9801 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
9802
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9803 /* 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
9804
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9805 /* 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
9806 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
9807 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
9808 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
9809 | 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
9810 | 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
9811 | 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
9812
16483
1b53fdb98184 (XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents: 16430
diff changeset
9813 /* In case Meta is ComposeCharacter,
1b53fdb98184 (XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents: 16430
diff changeset
9814 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
9815 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
9816 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
9817 not it is combined with Meta. */
1b53fdb98184 (XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents: 16430
diff changeset
9818 if (modifiers & dpyinfo->meta_mod_mask)
1b53fdb98184 (XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents: 16430
diff changeset
9819 bzero (&compose_status, sizeof (compose_status));
1b53fdb98184 (XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents: 16430
diff changeset
9820
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9821 #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
9822 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
9823 {
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9824 Status status_return;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9825
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9826 nbytes = XmbLookupString (FRAME_XIC (f),
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9827 &event.xkey, copy_bufptr,
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9828 copy_bufsiz, &keysym,
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9829 &status_return);
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9830 if (status_return == XBufferOverflow)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9831 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9832 copy_bufsiz = nbytes + 1;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9833 copy_bufptr = (char *) alloca (copy_bufsiz);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9834 nbytes = XmbLookupString (FRAME_XIC (f),
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9835 &event.xkey, copy_bufptr,
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9836 copy_bufsiz, &keysym,
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9837 &status_return);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9838 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9839
23567
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
9840 if (status_return == XLookupNone)
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
9841 break;
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
9842 else if (status_return == XLookupChars)
29744
1ac32ce72622 (XTread_socket) <KeyPress>: In case XmbLookupString
Gerd Moellmann <gerd@gnu.org>
parents: 29717
diff changeset
9843 {
1ac32ce72622 (XTread_socket) <KeyPress>: In case XmbLookupString
Gerd Moellmann <gerd@gnu.org>
parents: 29717
diff changeset
9844 keysym = NoSymbol;
1ac32ce72622 (XTread_socket) <KeyPress>: In case XmbLookupString
Gerd Moellmann <gerd@gnu.org>
parents: 29717
diff changeset
9845 modifiers = 0;
1ac32ce72622 (XTread_socket) <KeyPress>: In case XmbLookupString
Gerd Moellmann <gerd@gnu.org>
parents: 29717
diff changeset
9846 }
23567
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
9847 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
9848 && status_return != XLookupBoth)
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
9849 abort ();
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9850 }
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9851 else
30748
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9852 nbytes = XLookupString (&event.xkey, copy_bufptr,
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9853 copy_bufsiz, &keysym,
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9854 &compose_status);
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9855 #else
30748
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9856 nbytes = XLookupString (&event.xkey, copy_bufptr,
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9857 copy_bufsiz, &keysym,
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9858 &compose_status);
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9859 #endif
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9860
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9861 orig_keysym = keysym;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9862
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9863 if (numchars > 1)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9864 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9865 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
9866 || keysym == XK_Delete
17227
d11d6c9a48e8 (XTread_socket): Handle ISO_Left_Tab.
Richard M. Stallman <rms@gnu.org>
parents: 17194
diff changeset
9867 #ifdef XK_ISO_Left_Tab
17232
4604d19bd730 (XTread_socket): Accept XK_ISO_* keys.
Richard M. Stallman <rms@gnu.org>
parents: 17227
diff changeset
9868 || (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
9869 #endif
22400
8fbe6f509385 (XTread_socket): Accept Japanese XK keysyms.
Richard M. Stallman <rms@gnu.org>
parents: 22230
diff changeset
9870 || (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
9871 || 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
9872 || IsMiscFunctionKey (keysym) /* 0xff60 <= x < VARIES */
3218
0069a30d083f (XTread_socket, case KeyPress) [HPUX]:
Richard M. Stallman <rms@gnu.org>
parents: 3135
diff changeset
9873 #ifdef HPUX
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9874 /* 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
9875 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
9876 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
9877 incorrectly. */
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9878 || ((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
9879 && (unsigned)(keysym) < XK_KP_Space)
3218
0069a30d083f (XTread_socket, case KeyPress) [HPUX]:
Richard M. Stallman <rms@gnu.org>
parents: 3135
diff changeset
9880 #endif
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9881 #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
9882 || orig_keysym == XK_dead_circumflex
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9883 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9884 #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
9885 || orig_keysym == XK_dead_grave
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9886 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9887 #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
9888 || orig_keysym == XK_dead_tilde
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9889 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9890 #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
9891 || orig_keysym == XK_dead_diaeresis
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9892 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9893 #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
9894 || orig_keysym == XK_dead_macron
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9895 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9896 #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
9897 || orig_keysym == XK_dead_degree
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9898 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9899 #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
9900 || orig_keysym == XK_dead_acute
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9901 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9902 #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
9903 || orig_keysym == XK_dead_cedilla
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9904 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9905 #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
9906 || orig_keysym == XK_dead_breve
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9907 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9908 #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
9909 || orig_keysym == XK_dead_ogonek
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9910 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9911 #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
9912 || orig_keysym == XK_dead_caron
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9913 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9914 #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
9915 || orig_keysym == XK_dead_doubleacute
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9916 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9917 #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
9918 || orig_keysym == XK_dead_abovedot
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9919 #endif
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9920 || 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
9921 || 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
9922 /* 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
9923 || (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
9924 && ! (IsModifierKey (orig_keysym)
4244
bc70363458c3 (XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents: 4147
diff changeset
9925 #ifndef HAVE_X11R5
bc70363458c3 (XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents: 4147
diff changeset
9926 #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
9927 || ((unsigned)(orig_keysym) == XK_Mode_switch)
4244
bc70363458c3 (XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents: 4147
diff changeset
9928 #endif
bc70363458c3 (XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents: 4147
diff changeset
9929 #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
9930 || ((unsigned)(orig_keysym) == XK_Num_Lock)
4244
bc70363458c3 (XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents: 4147
diff changeset
9931 #endif
bc70363458c3 (XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents: 4147
diff changeset
9932 #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
9933 ))
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9934 {
2064
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
9935 if (temp_index == sizeof temp_buffer / sizeof (short))
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
9936 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
9937 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
9938 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
9939 bufp->code = keysym;
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
9940 XSETFRAME (bufp->frame_or_window, f);
30197
3237a5529020 (construct_mouse_click, x_scroll_bar_to_input_event)
Gerd Moellmann <gerd@gnu.org>
parents: 30182
diff changeset
9941 bufp->arg = Qnil;
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
9942 bufp->modifiers
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
9943 = 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
9944 modifiers);
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 642
diff changeset
9945 bufp->timestamp = event.xkey.time;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9946 bufp++;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9947 count++;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9948 numchars--;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9949 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9950 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
9951 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9952 register int i;
30748
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9953 register int c;
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9954 int nchars, len;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9955
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9956 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
9957 {
30748
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9958 if (temp_index == (sizeof temp_buffer
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9959 / sizeof (short)))
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9960 temp_index = 0;
30748
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9961 temp_buffer[temp_index++] = copy_bufptr[i];
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9962 }
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9963
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9964 if (/* If the event is not from XIM, */
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9965 event.xkey.keycode != 0
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9966 /* or the current locale doesn't request
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9967 decoding of the intup data, ... */
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9968 || coding.type == coding_type_raw_text
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9969 || coding.type == coding_type_no_conversion)
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9970 {
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9971 /* ... we can use the input data as is. */
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9972 nchars = nbytes;
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9973 }
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9974 else
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9975 {
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9976 /* We have to decode the input data. */
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9977 int require;
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9978 unsigned char *p;
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9979
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9980 require = decoding_buffer_size (&coding, nbytes);
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9981 p = (unsigned char *) alloca (require);
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9982 coding.mode |= CODING_MODE_LAST_BLOCK;
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9983 decode_coding (&coding, copy_bufptr, p,
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9984 nbytes, require);
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9985 nbytes = coding.produced;
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9986 nchars = coding.produced_char;
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9987 copy_bufptr = p;
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9988 }
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9989
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9990 /* Convert the input data to a sequence of
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9991 character events. */
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9992 for (i = 0; i < nbytes; i += len)
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9993 {
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9994 c = STRING_CHAR_AND_LENGTH (copy_bufptr + i,
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9995 nbytes - i, len);
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9996 bufp->kind = (SINGLE_BYTE_CHAR_P (c)
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9997 ? ascii_keystroke
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9998 : multibyte_char_keystroke);
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9999 bufp->code = c;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10000 XSETFRAME (bufp->frame_or_window, f);
30197
3237a5529020 (construct_mouse_click, x_scroll_bar_to_input_event)
Gerd Moellmann <gerd@gnu.org>
parents: 30182
diff changeset
10001 bufp->arg = Qnil;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10002 bufp->modifiers
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10003 = 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
10004 modifiers);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10005 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
10006 bufp++;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10007 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10008
30748
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10009 count += nchars;
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10010 numchars -= nchars;
23567
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
10011
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
10012 if (keysym == NoSymbol)
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
10013 break;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10014 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10015 else
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10016 abort ();
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10017 }
2064
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
10018 else
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
10019 abort ();
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10020 }
27619
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10021 #ifdef HAVE_X_I18N
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10022 /* Don't dispatch this event since XtDispatchEvent calls
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10023 XFilterEvent, and two calls in a row may freeze the
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10024 client. */
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10025 break;
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10026 #else
13898
dceb33c07f9e (XTread_socket): Pass KeyPress events to the toolkit.
Richard M. Stallman <rms@gnu.org>
parents: 13884
diff changeset
10027 goto OTHER;
27619
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10028 #endif
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10029
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10030 case KeyRelease:
27619
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10031 #ifdef HAVE_X_I18N
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10032 /* Don't dispatch this event since XtDispatchEvent calls
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10033 XFilterEvent, and two calls in a row may freeze the
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10034 client. */
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10035 break;
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10036 #else
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10037 goto OTHER;
27619
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10038 #endif
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10039
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10040 /* 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
10041 FocusIn-EnterNotify FocusOut-LeaveNotify mess. If
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10042 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
10043 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
10044 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
10045 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
10046
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10047 case EnterNotify:
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10048 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10049 int from_menu_bar_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10050
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10051 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
10052
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10053 #ifdef LESSTIF_VERSION
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10054 /* 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
10055 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
10056 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
10057 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
10058 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
10059 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
10060 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
10061 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
10062 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
10063 value.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10064
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10065 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
10066 reproduce the behavior in a simple test program.
35568
1a9a88614b73 Update a comment.
Gerd Moellmann <gerd@gnu.org>
parents: 35506
diff changeset
10067 On the other hand, Motif seems to not have this
1a9a88614b73 Update a comment.
Gerd Moellmann <gerd@gnu.org>
parents: 35506
diff changeset
10068 problem.
1a9a88614b73 Update a comment.
Gerd Moellmann <gerd@gnu.org>
parents: 35506
diff changeset
10069
1a9a88614b73 Update a comment.
Gerd Moellmann <gerd@gnu.org>
parents: 35506
diff changeset
10070 (gerd, LessTif 0.92). */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10071
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10072 if (!event.xcrossing.focus
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10073 && f
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10074 && f->output_data.x->menubar_widget)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10075 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10076 Window focus;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10077 int revert;
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 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
10080 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
10081 from_menu_bar_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10082 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10083 #endif /* LESSTIF_VERSION */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10084
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10085 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
10086 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10087 /* Avoid nasty pop/raise loops. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10088 if (f && (!(f->auto_raise)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10089 || !(f->auto_lower)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10090 || (event.xcrossing.time - enter_timestamp) > 500))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10091 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10092 x_new_focus_frame (dpyinfo, f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10093 enter_timestamp = event.xcrossing.time;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10094 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10095 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10096 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
10097 x_new_focus_frame (dpyinfo, 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10098
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10099 /* EnterNotify counts as mouse movement,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10100 so update things that depend on mouse position. */
36251
94d6ad393a74 (XTread_socket): Test x_output's hourglass_p instead
Gerd Moellmann <gerd@gnu.org>
parents: 36117
diff changeset
10101 if (f && !f->output_data.x->hourglass_p)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10102 note_mouse_movement (f, &event.xmotion);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10103 goto OTHER;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10104 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10105
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10106 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
10107 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
10108 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
10109 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
10110 if (f)
29512
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
10111 {
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
10112 x_new_focus_frame (dpyinfo, f);
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
10113
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
10114 /* Don't stop displaying the initial startup message
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
10115 for a switch-frame event we don't need. */
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
10116 if (GC_NILP (Vterminal_frame)
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
10117 && GC_CONSP (Vframe_list)
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
10118 && !GC_NILP (XCDR (Vframe_list)))
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
10119 {
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
10120 bufp->kind = FOCUS_IN_EVENT;
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
10121 XSETFRAME (bufp->frame_or_window, f);
30197
3237a5529020 (construct_mouse_click, x_scroll_bar_to_input_event)
Gerd Moellmann <gerd@gnu.org>
parents: 30182
diff changeset
10122 bufp->arg = Qnil;
29512
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
10123 ++bufp, ++count, --numchars;
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
10124 }
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
10125 }
13205
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
10126
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
10127 #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
10128 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
10129 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
10130 #endif
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
10131
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10132 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10133
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10134 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
10135 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
10136 if (f)
7169
c21fcad6f1f5 (XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents: 7167
diff changeset
10137 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10138 int from_menu_bar_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10139
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10140 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
10141 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10142 /* 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
10143 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
10144 clear_mouse_face (dpyinfo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10145 dpyinfo->mouse_face_mouse_frame = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10146 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10147
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10148 /* 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
10149 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
10150 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
10151 the mouse leaves the frame. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10152 if (any_help_event_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10153 {
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
10154 Lisp_Object frame;
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
10155 int n;
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
10156
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10157 XSETFRAME (frame, f);
35082
f329eb3f956b (XTread_socket) <LeaveNotify>: Set help_echo to nil.
Gerd Moellmann <gerd@gnu.org>
parents: 35068
diff changeset
10158 help_echo = Qnil;
31011
bc4608ec8691 (XTread_socket): Change calls to gen_help_event.
Gerd Moellmann <gerd@gnu.org>
parents: 30748
diff changeset
10159 n = gen_help_event (bufp, numchars,
bc4608ec8691 (XTread_socket): Change calls to gen_help_event.
Gerd Moellmann <gerd@gnu.org>
parents: 30748
diff changeset
10160 Qnil, frame, Qnil, Qnil, 0);
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
10161 bufp += n, count += n, numchars -= n;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10162 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10163
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10164 #ifdef LESSTIF_VERSION
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10165 /* 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
10166 EnterNotify case. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10167 if (!event.xcrossing.focus
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10168 && f->output_data.x->menubar_widget)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10169 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10170 Window focus;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10171 int revert;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10172 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
10173 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
10174 from_menu_bar_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10175 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10176 #endif /* LESSTIF_VERSION */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10177
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10178 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
10179 x_mouse_leave (dpyinfo);
7169
c21fcad6f1f5 (XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents: 7167
diff changeset
10180 else
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10181 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
10182 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
10183 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
10184 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
10185 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
10186 }
7169
c21fcad6f1f5 (XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents: 7167
diff changeset
10187 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10188 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10189
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10190 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
10191 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
10192 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
10193 && 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
10194 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
10195 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
10196 x_new_focus_frame (dpyinfo, 0);
13205
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
10197
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
10198 #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
10199 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
10200 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
10201 #endif
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
10202
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10203 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10204
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10205 case MotionNotify:
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10206 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10207 previous_help_echo = help_echo;
30302
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
10208 help_echo = help_echo_object = help_echo_window = Qnil;
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
10209 help_echo_pos = -1;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10210
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10211 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
10212 && 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
10213 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
10214 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
10215 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
10216
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10217 if (f)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10218 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
10219 else
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10220 {
25795
84921c27b2b5 (XTread_socket) <MotionNotify>: Change #ifdef
Gerd Moellmann <gerd@gnu.org>
parents: 25716
diff changeset
10221 #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
10222 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
10223 = 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
10224
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10225 if (bar)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10226 x_scroll_bar_note_movement (bar, &event);
25795
84921c27b2b5 (XTread_socket) <MotionNotify>: Change #ifdef
Gerd Moellmann <gerd@gnu.org>
parents: 25716
diff changeset
10227 #endif /* USE_TOOLKIT_SCROLL_BARS */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10228
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10229 /* 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
10230 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
10231 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
10232 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10233
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10234 /* 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
10235 has changed, generate a HELP_EVENT. */
30050
ed1979c6dfb9 * xterm.c (note_mode_line_highlight, note_mouse_highlight)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30042
diff changeset
10236 if (!NILP (help_echo)
ed1979c6dfb9 * xterm.c (note_mode_line_highlight, note_mouse_highlight)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30042
diff changeset
10237 || !NILP (previous_help_echo))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10238 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10239 Lisp_Object frame;
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
10240 int n;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10241
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10242 if (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10243 XSETFRAME (frame, f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10244 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10245 frame = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10246
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10247 any_help_event_p = 1;
31011
bc4608ec8691 (XTread_socket): Change calls to gen_help_event.
Gerd Moellmann <gerd@gnu.org>
parents: 30748
diff changeset
10248 n = gen_help_event (bufp, numchars, help_echo, frame,
30302
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
10249 help_echo_window, help_echo_object,
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
10250 help_echo_pos);
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
10251 bufp += n, count += n, numchars -= n;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10252 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10253
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10254 goto OTHER;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10255 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10256
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10257 case ConfigureNotify:
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10258 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
10259 if (f)
3030
2c5ea1c98256 (XTread_socket): For ConfigureNotify event,
Richard M. Stallman <rms@gnu.org>
parents: 3016
diff changeset
10260 {
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
10261 #ifndef USE_X_TOOLKIT
24489
abf5b4802f9b (XTread_socket) <ConfigureNotify>:
Karl Heuer <kwzh@gnu.org>
parents: 24484
diff changeset
10262 int rows = PIXEL_TO_CHAR_HEIGHT (f, event.xconfigure.height);
abf5b4802f9b (XTread_socket) <ConfigureNotify>:
Karl Heuer <kwzh@gnu.org>
parents: 24484
diff changeset
10263 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
10264
11436
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
10265 /* 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
10266 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
10267 of the EmacsFrame widget. */
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
10268
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10269 /* 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
10270 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
10271 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
10272 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
10273 || 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
10274 || 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
10275 || 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
10276 {
25360
2f3ad0a21be5 Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents: 25328
diff changeset
10277 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
10278 SET_FRAME_GARBAGED (f);
16491
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
10279 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
10280 }
11436
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
10281 #endif
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
10282
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->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
10284 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
10285
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10286 /* 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
10287 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
10288 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
10289 &f->output_data.x->top_pos);
d25d2472df51 (XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents: 17963
diff changeset
10290
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10291 #ifdef HAVE_X_I18N
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10292 if (FRAME_XIC (f) && (FRAME_XIC_STYLE (f) & XIMStatusArea))
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10293 xic_set_statusarea (f);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10294 #endif
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10295
18008
d25d2472df51 (XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents: 17963
diff changeset
10296 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
10297 {
d25d2472df51 (XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents: 17963
diff changeset
10298 /* 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
10299 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
10300 f->output_data.x->win_gravity = NorthWestGravity;
d25d2472df51 (XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents: 17963
diff changeset
10301 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
10302 }
20182
9f3dd970927e (XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents: 20180
diff changeset
10303 #ifdef USE_MOTIF
9f3dd970927e (XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents: 20180
diff changeset
10304 /* 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
10305 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
10306 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
10307 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
10308 {
9f3dd970927e (XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents: 20180
diff changeset
10309 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
10310 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
10311 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10312 #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
10313 }
11436
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
10314 goto OTHER;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10315
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10316 case ButtonPress:
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10317 case ButtonRelease:
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
10318 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10319 /* 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
10320 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
10321 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
10322 int tool_bar_p = 0;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10323
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10324 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
10325 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
10326
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10327 if (dpyinfo->grabbed
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10328 && last_mouse_frame
10274
83aaf59dabbe (XTupdate_begin): Fix backward test in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 10223
diff changeset
10329 && 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
10330 f = last_mouse_frame;
83aaf59dabbe (XTupdate_begin): Fix backward test in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 10223
diff changeset
10331 else
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10332 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
10333
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10334 if (f)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10335 {
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
10336 /* 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
10337 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
10338 && 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
10339 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10340 Lisp_Object window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10341 int p, x, y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10342
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10343 x = event.xbutton.x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10344 y = event.xbutton.y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10345
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10346 /* Set x and y. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10347 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
10348 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
10349 {
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
10350 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
10351 tool_bar_p = 1;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10352 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10353 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10354
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
10355 if (!tool_bar_p)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10356 if (!dpyinfo->x_focus_frame
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10357 || f == dpyinfo->x_focus_frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10358 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
10359 }
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10360 else
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10361 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10362 #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
10363 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
10364 = 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
10365
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10366 if (bar)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10367 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
10368 #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
10369 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10370
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10371 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
10372 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10373 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
10374 last_mouse_frame = f;
23643
701b6bdc7a22 (XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents: 23567
diff changeset
10375 /* Ignore any mouse motion that happened
701b6bdc7a22 (XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents: 23567
diff changeset
10376 before this event; any subsequent mouse-movement
701b6bdc7a22 (XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents: 23567
diff changeset
10377 Emacs events should reflect only motion after
701b6bdc7a22 (XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents: 23567
diff changeset
10378 the ButtonPress. */
23701
6c0896abbbd4 (XTread_socket): Fix previous change in case F == 0.
Karl Heuer <kwzh@gnu.org>
parents: 23684
diff changeset
10379 if (f != 0)
6c0896abbbd4 (XTread_socket): Fix previous change in case F == 0.
Karl Heuer <kwzh@gnu.org>
parents: 23684
diff changeset
10380 f->mouse_moved = 0;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10381
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
10382 if (!tool_bar_p)
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
10383 last_tool_bar_item = -1;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10384 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10385 else
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10386 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10387 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
10388 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10389
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10390 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
10391 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10392 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
10393 bufp++;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10394 count++;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10395 numchars--;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10396 }
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10397
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10398 #ifdef USE_X_TOOLKIT
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10399 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
10400 /* For a down-event in the menu bar,
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10401 don't pass it to Xt right now.
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10402 Instead, save it away
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10403 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
10404 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
10405 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
10406 /* 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
10407 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
10408 && event.xbutton.x >= 0
21b6b8f50143 (XTread_socket): Verify a ButtonPress was actually in the
Richard M. Stallman <rms@gnu.org>
parents: 13507
diff changeset
10409 && 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
10410 && event.xbutton.y >= 0
21b6b8f50143 (XTread_socket): Verify a ButtonPress was actually in the
Richard M. Stallman <rms@gnu.org>
parents: 13507
diff changeset
10411 && 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
10412 && event.xbutton.same_screen)
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10413 {
15711
099dc465c948 (SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents: 15639
diff changeset
10414 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
10415 XSETFRAME (last_mouse_press_frame, f);
15793
fc460a98a7f9 (last_mouse_press_frame): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 15711
diff changeset
10416 }
15803
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
10417 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
10418 {
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
10419 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
10420 goto OTHER;
15803
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
10421 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10422
15803
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
10423 #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
10424 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
10425 else if (event.type == ButtonRelease)
fc460a98a7f9 (last_mouse_press_frame): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 15711
diff changeset
10426 {
15803
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
10427 if (!NILP (last_mouse_press_frame))
15794
c741a26258ce Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 15793
diff changeset
10428 {
15803
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
10429 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
10430 if (f->output_data.x)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10431 SET_SAVED_BUTTON_EVENT;
15794
c741a26258ce Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 15793
diff changeset
10432 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10433 else
15808
3afa38a18102 (XTread_socket): Delete the code to pass menu bar keys
Richard M. Stallman <rms@gnu.org>
parents: 15806
diff changeset
10434 goto OTHER;
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10435 }
15803
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
10436 #endif /* USE_MOTIF */
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10437 else
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10438 goto OTHER;
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10439 #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
10440 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10441 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10442
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10443 case CirculateNotify:
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10444 goto OTHER;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10445
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10446 case CirculateRequest:
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10447 goto OTHER;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10448
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10449 case VisibilityNotify:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10450 goto OTHER;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10451
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10452 case MappingNotify:
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10453 /* 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
10454 local cache. */
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10455 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
10456 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10457 case MappingModifier:
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10458 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
10459 /* 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
10460 case MappingKeyboard:
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10461 XRefreshKeyboardMapping (&event.xmapping);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10462 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10463 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10464
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10465 default:
13898
dceb33c07f9e (XTread_socket): Pass KeyPress events to the toolkit.
Richard M. Stallman <rms@gnu.org>
parents: 13884
diff changeset
10466 OTHER:
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10467 #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
10468 BLOCK_INPUT;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10469 XtDispatchEvent (&event);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10470 UNBLOCK_INPUT;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10471 #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
10472 break;
1436
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
10473 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10474 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10475 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10476
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10477 out:;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10478
8485
6e4b40c80021 (XTread_socket): Don't test X_IO_BUG; make that code unconditional.
Richard M. Stallman <rms@gnu.org>
parents: 8437
diff changeset
10479 /* 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
10480 when the window is destroyed. Detect that. (1994.) */
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
10481 if (! event_found)
7916
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
10482 {
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
10483 /* 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
10484 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
10485 B. Bretthauer, 1994 */
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
10486 x_noop_count++;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
10487 if (x_noop_count >= 100)
7916
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
10488 {
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
10489 x_noop_count=0;
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10490
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10491 if (next_noop_dpyinfo == 0)
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10492 next_noop_dpyinfo = x_display_list;
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10493
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10494 XNoOp (next_noop_dpyinfo->display);
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10495
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10496 /* 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
10497 next_noop_dpyinfo = next_noop_dpyinfo->next;
7916
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
10498 }
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
10499 }
5753
eb44ecad5557 (XTread_socket): Add X_IO_BUG conditional.
Richard M. Stallman <rms@gnu.org>
parents: 5740
diff changeset
10500
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10501 /* 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
10502 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
10503 /* ??? 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
10504 if (pending_autoraise_frame)
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
10505 {
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
10506 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
10507 pending_autoraise_frame = 0;
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
10508 }
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
10509
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10510 UNBLOCK_INPUT;
30083
998d20abc885 (XTread_socket): Increment handling_signal at the start,
Gerd Moellmann <gerd@gnu.org>
parents: 30050
diff changeset
10511 --handling_signal;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10512 return count;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10513 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10514
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10515
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10516
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10517
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10518 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10519 Text Cursor
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10520 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10521
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10522 /* 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
10523 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
10524 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
10525 line after HPOS has been written. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10526
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10527 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10528 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
10529 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10530 int hpos, n;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10531 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10532 if (updated_area == TEXT_AREA
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10533 && 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
10534 && hpos <= w->phys_cursor.hpos
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10535 && (n < 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10536 || hpos + n > w->phys_cursor.hpos))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10537 w->phys_cursor_on_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10538 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10539
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10540
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10541 /* 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
10542 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
10543 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
10544 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
10545
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10546 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
10547 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
10548 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
10549
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10550 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10551 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
10552 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10553 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10554 GC gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10555 int whole_line_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10556 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10557 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
10558 XRectangle clip_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10559 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
10560
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10561 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
10562
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10563 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
10564 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
10565 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
10566 clip_rect.width = window_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10567 clip_rect.height = row->visible_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10568
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10569 /* 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
10570 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
10571 if (whole_line_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10572 {
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
10573 clip_rect.x -= FRAME_X_LEFT_FLAGS_AREA_WIDTH (f);
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
10574 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
10575 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10576
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10577 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
10578 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10579
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10580
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10581 /* 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
10582
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10583 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10584 x_draw_hollow_cursor (w, row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10585 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10586 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10587 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10588 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
10589 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
10590 Display *dpy = FRAME_X_DISPLAY (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10591 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
10592 XGCValues xgcv;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10593 struct glyph *cursor_glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10594 GC gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10595
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10596 /* 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
10597 coordinates. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10598 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
10599 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
10600 + row->ascent - w->phys_cursor_ascent);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10601 h = row->height - 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10602
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10603 /* 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
10604 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
10605 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
10606 if (cursor_glyph == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10607 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10608
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10609 /* 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
10610 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
10611 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
10612 width instead. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10613 wd = cursor_glyph->pixel_width - 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10614 if (cursor_glyph->type == STRETCH_GLYPH
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10615 && !x_stretch_cursor_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10616 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
10617
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10618 /* 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
10619 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
10620 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
10621 if (dpyinfo->scratch_cursor_gc)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10622 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
10623 else
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10624 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
10625 GCForeground, &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10626 gc = dpyinfo->scratch_cursor_gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10627
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10628 /* 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
10629 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
10630 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
10631 XSetClipMask (dpy, gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10632 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10633
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10634
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10635 /* 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
10636
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10637 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
10638 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
10639 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
10640 --gerd. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10641
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10642 static void
28321
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10643 x_draw_bar_cursor (w, row, width)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10644 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10645 struct glyph_row *row;
28321
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10646 int width;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10647 {
30742
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10648 struct frame *f = XFRAME (w->frame);
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10649 struct glyph *cursor_glyph;
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10650 GC gc;
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10651 int x;
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10652 unsigned long mask;
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10653 XGCValues xgcv;
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10654 Display *dpy;
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10655 Window window;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10656
30742
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10657 /* If cursor is out of bounds, don't draw garbage. This can happen
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10658 in mini-buffer windows when switching between echo area glyphs
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10659 and mini-buffer. */
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10660 cursor_glyph = get_phys_cursor_glyph (w);
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10661 if (cursor_glyph == NULL)
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10662 return;
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10663
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10664 /* If on an image, draw like a normal cursor. That's usually better
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10665 visible than drawing a bar, esp. if the image is large so that
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10666 the bar might not be in the window. */
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10667 if (cursor_glyph->type == IMAGE_GLYPH)
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10668 {
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10669 struct glyph_row *row;
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10670 row = MATRIX_ROW (w->current_matrix, w->phys_cursor.vpos);
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10671 x_draw_phys_cursor_glyph (w, row, DRAW_CURSOR);
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10672 }
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10673 else
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10674 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10675 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
10676 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
10677 xgcv.graphics_exposures = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10678 mask = GCForeground | GCBackground | GCGraphicsExposures;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10679 dpy = FRAME_X_DISPLAY (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10680 window = FRAME_X_WINDOW (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10681 gc = FRAME_X_DISPLAY_INFO (f)->scratch_cursor_gc;
30742
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10682
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10683 if (gc)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10684 XChangeGC (dpy, gc, mask, &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10685 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10686 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10687 gc = XCreateGC (dpy, window, mask, &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10688 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
10689 }
30742
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10690
28321
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10691 if (width < 0)
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10692 width = f->output_data.x->cursor_width;
30742
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10693
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10694 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
10695 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
10696 XFillRectangle (dpy, window, gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10697 x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10698 WINDOW_TO_FRAME_PIXEL_Y (w, w->phys_cursor.y),
28321
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10699 min (cursor_glyph->pixel_width, width),
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10700 row->height);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10701 XSetClipMask (dpy, gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10702 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10703 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10704
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10705
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10706 /* 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
10707 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
10708 is is about to be rewritten. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10709
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10710 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10711 x_clear_cursor (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10712 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10713 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10714 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
10715 x_update_window_cursor (w, 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10716 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10717
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10718
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10719 /* 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
10720 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
10721
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10722 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10723 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
10724 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10725 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10726 enum draw_glyphs_face hl;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10727 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10728 /* 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
10729 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
10730 glyphs and mini-buffer. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10731 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
10732 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
10733 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
10734 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
10735 hl, 0, 0, 0);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
10736
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
10737 /* 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
10738 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
10739 are redrawn. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
10740 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
10741 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
10742 if (row > w->current_matrix->rows
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
10743 && MATRIX_ROW_OVERLAPS_SUCC_P (row - 1))
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
10744 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
10745
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
10746 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
10747 && MATRIX_ROW_OVERLAPS_PRED_P (row + 1))
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
10748 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
10749 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
10750 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10751 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10752
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10753
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10754 /* 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
10755
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10756 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10757 x_erase_phys_cursor (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10758 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10759 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10760 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10761 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
10762 int hpos = w->phys_cursor.hpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10763 int vpos = w->phys_cursor.vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10764 int mouse_face_here_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10765 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
10766 struct glyph_row *cursor_row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10767 struct glyph *cursor_glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10768 enum draw_glyphs_face hl;
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 /* 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
10771 screen. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10772 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
10773 goto mark_cursor_off;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10774
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10775 /* 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
10776 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
10777 if (vpos >= active_glyphs->nrows)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10778 goto mark_cursor_off;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10779
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10780 /* 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
10781 can do. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10782 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
10783 if (!cursor_row->enabled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10784 goto mark_cursor_off;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10785
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10786 /* 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
10787 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
10788 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
10789 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
10790 cursor glyph at hand. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10791 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
10792 goto mark_cursor_off;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10793
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10794 /* 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
10795 we clear the cursor. */
28417
4b675266db04 * lisp.h (XCONS, XSTRING, XSYMBOL, XFLOAT, XPROCESS, XWINDOW, XSUBR, XBUFFER):
Ken Raeburn <raeburn@raeburn.org>
parents: 28356
diff changeset
10796 if (! NILP (dpyinfo->mouse_face_window)
4b675266db04 * lisp.h (XCONS, XSTRING, XSYMBOL, XFLOAT, XPROCESS, XWINDOW, XSUBR, XBUFFER):
Ken Raeburn <raeburn@raeburn.org>
parents: 28356
diff changeset
10797 && 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
10798 && (vpos > dpyinfo->mouse_face_beg_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10799 || (vpos == dpyinfo->mouse_face_beg_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10800 && hpos >= dpyinfo->mouse_face_beg_col))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10801 && (vpos < dpyinfo->mouse_face_end_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10802 || (vpos == dpyinfo->mouse_face_end_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10803 && hpos < dpyinfo->mouse_face_end_col))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10804 /* 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
10805 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
10806 mouse highlighting does not. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10807 && cursor_row->used[TEXT_AREA] > hpos)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10808 mouse_face_here_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10809
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10810 /* 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
10811 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
10812 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10813 int x;
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
10814 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
10815
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10816 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
10817 if (cursor_glyph == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10818 goto mark_cursor_off;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10819
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10820 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
10821
35581
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
10822 x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
10823 x,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
10824 WINDOW_TO_FRAME_PIXEL_Y (w, max (header_line_height,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
10825 cursor_row->y)),
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
10826 cursor_glyph->pixel_width,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
10827 cursor_row->visible_height,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
10828 False);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10829 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10830
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10831 /* 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
10832 if (mouse_face_here_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10833 hl = DRAW_MOUSE_FACE;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10834 else if (cursor_row->inverse_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10835 hl = DRAW_INVERSE_VIDEO;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10836 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10837 hl = DRAW_NORMAL_TEXT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10838 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
10839
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10840 mark_cursor_off:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10841 w->phys_cursor_on_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10842 w->phys_cursor_type = NO_CURSOR;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10843 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10844
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10845
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10846 /* 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
10847 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
10848 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
10849
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10850 void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10851 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
10852 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10853 int on, hpos, vpos, x, y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10854 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10855 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10856 int new_cursor_type;
28321
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10857 int new_cursor_width;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10858 struct glyph_matrix *current_glyphs;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10859 struct glyph_row *glyph_row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10860 struct glyph *glyph;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10861
2235
80e0d36bbb77 * xterm.c (x_display_box_cursor, x_display_bar_cursor): Don't
Jim Blandy <jimb@redhat.com>
parents: 2195
diff changeset
10862 /* 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
10863 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
10864 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
10865 window. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10866 if (! FRAME_VISIBLE_P (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10867 || FRAME_GARBAGED_P (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10868 || vpos >= w->current_matrix->nrows
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10869 || hpos >= w->current_matrix->matrix_w)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10870 return;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10871
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10872 /* 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
10873 if (!on && !w->phys_cursor_on_p)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10874 return;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10875
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10876 current_glyphs = w->current_matrix;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10877 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
10878 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
10879
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10880 /* 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
10881 display the cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10882 if (!glyph_row->enabled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10883 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10884 w->phys_cursor_on_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10885 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10886 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10887
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10888 xassert (interrupt_input_blocked);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10889
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10890 /* 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
10891 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
10892 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
10893 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
10894 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
10895 box cursor. */
28321
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10896 new_cursor_width = -1;
25191
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10897 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
10898 && 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
10899 && 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
10900 {
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10901 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
10902 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
10903 else
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10904 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
10905 }
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10906 else
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10907 {
35897
02652537e9d2 (x_display_and_set_cursor): Check for the focus
Gerd Moellmann <gerd@gnu.org>
parents: 35581
diff changeset
10908 if (f != FRAME_X_DISPLAY_INFO (f)->x_highlight_frame
02652537e9d2 (x_display_and_set_cursor): Check for the focus
Gerd Moellmann <gerd@gnu.org>
parents: 35581
diff changeset
10909 || w != XWINDOW (f->selected_window))
25191
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10910 {
27844
72e15185eeb5 (x_display_and_set_cursor): Display cursor of
Gerd Moellmann <gerd@gnu.org>
parents: 27619
diff changeset
10911 extern int cursor_in_non_selected_windows;
72e15185eeb5 (x_display_and_set_cursor): Display cursor of
Gerd Moellmann <gerd@gnu.org>
parents: 27619
diff changeset
10912
31699
9ff91d2b19f8 (x_display_and_set_cursor): Don't show a hollow box
Gerd Moellmann <gerd@gnu.org>
parents: 31694
diff changeset
10913 if (MINI_WINDOW_P (w)
9ff91d2b19f8 (x_display_and_set_cursor): Don't show a hollow box
Gerd Moellmann <gerd@gnu.org>
parents: 31694
diff changeset
10914 || !cursor_in_non_selected_windows
9ff91d2b19f8 (x_display_and_set_cursor): Don't show a hollow box
Gerd Moellmann <gerd@gnu.org>
parents: 31694
diff changeset
10915 || NILP (XBUFFER (w->buffer)->cursor_type))
25191
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10916 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
10917 else
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10918 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
10919 }
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10920 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
10921 new_cursor_type = NO_CURSOR;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10922 else
28321
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10923 {
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10924 struct buffer *b = XBUFFER (w->buffer);
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10925
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10926 if (EQ (b->cursor_type, Qt))
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10927 new_cursor_type = FRAME_DESIRED_CURSOR (f);
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10928 else
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10929 new_cursor_type = x_specified_cursor_type (b->cursor_type,
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10930 &new_cursor_width);
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10931 }
25191
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10932 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10933
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10934 /* 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
10935 it is in the wrong place, or the cursor type is not what we want,
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10936 erase it. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10937 if (w->phys_cursor_on_p
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10938 && (!on
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10939 || w->phys_cursor.x != x
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10940 || w->phys_cursor.y != y
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10941 || 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
10942 x_erase_phys_cursor (w);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10943
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10944 /* 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
10945 display it. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10946 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
10947 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10948 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
10949 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
10950
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10951 /* 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
10952 of them may need the information. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10953 w->phys_cursor.x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10954 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
10955 w->phys_cursor.hpos = hpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10956 w->phys_cursor.vpos = vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10957 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
10958 w->phys_cursor_on_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10959
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10960 switch (new_cursor_type)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10961 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10962 case HOLLOW_BOX_CURSOR:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10963 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
10964 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10965
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10966 case FILLED_BOX_CURSOR:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10967 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
10968 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10969
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10970 case BAR_CURSOR:
28321
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10971 x_draw_bar_cursor (w, glyph_row, new_cursor_width);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10972 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10973
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10974 case NO_CURSOR:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10975 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10976
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10977 default:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10978 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10979 }
27619
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10980
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10981 #ifdef HAVE_X_I18N
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10982 if (w == XWINDOW (f->selected_window))
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10983 if (FRAME_XIC (f) && (FRAME_XIC_STYLE (f) & XIMPreeditPosition))
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10984 xic_set_preeditarea (w, x, y);
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10985 #endif
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10986 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10987
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10988 #ifndef XFlush
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10989 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
10990 XFlush (FRAME_X_DISPLAY (f));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10991 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10992 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10993
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10994
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10995 /* 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
10996 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
10997 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
10998 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
10999 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
11000
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
11001 void
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11002 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
11003 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11004 int on, hpos, vpos, x, y;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11005 {
5872
6389c826f847 (x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents: 5825
diff changeset
11006 BLOCK_INPUT;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11007 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
11008 UNBLOCK_INPUT;
80a5aedfb4c7 (XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents: 12192
diff changeset
11009 }
80a5aedfb4c7 (XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents: 12192
diff changeset
11010
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11011
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11012 /* 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
11013 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
11014
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
11015 void
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11016 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
11017 struct frame *f;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11018 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11019 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
11020 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11021
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11022
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11023 /* 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
11024 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
11025
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11026 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11027 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
11028 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11029 int on_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11030 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11031 while (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11032 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11033 if (!NILP (w->hchild))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11034 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
11035 else if (!NILP (w->vchild))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11036 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
11037 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11038 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
11039
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11040 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
11041 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11042 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11043
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11044
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11045 /* 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
11046 of ON. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11047
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11048 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11049 x_update_window_cursor (w, on)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11050 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
11051 int on;
80a5aedfb4c7 (XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents: 12192
diff changeset
11052 {
28183
7d97c6fbc3d9 (x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents: 28142
diff changeset
11053 /* Don't update cursor in windows whose frame is in the process
7d97c6fbc3d9 (x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents: 28142
diff changeset
11054 of being deleted. */
7d97c6fbc3d9 (x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents: 28142
diff changeset
11055 if (w->current_matrix)
7d97c6fbc3d9 (x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents: 28142
diff changeset
11056 {
7d97c6fbc3d9 (x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents: 28142
diff changeset
11057 BLOCK_INPUT;
7d97c6fbc3d9 (x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents: 28142
diff changeset
11058 x_display_and_set_cursor (w, on, w->phys_cursor.hpos, w->phys_cursor.vpos,
7d97c6fbc3d9 (x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents: 28142
diff changeset
11059 w->phys_cursor.x, w->phys_cursor.y);
7d97c6fbc3d9 (x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents: 28142
diff changeset
11060 UNBLOCK_INPUT;
7d97c6fbc3d9 (x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents: 28142
diff changeset
11061 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11062 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11063
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11064
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11065
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11066
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11067 /* Icons. */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11068
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11069 /* 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
11070 when we get an expose event for it. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11071
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
11072 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11073 refreshicon (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11074 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11075 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11076 /* Normally, the window manager handles this function. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11077 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11078
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
11079 /* Make the x-window of frame F use the gnu icon bitmap. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11080
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11081 int
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11082 x_bitmap_icon (f, file)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11083 struct frame *f;
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11084 Lisp_Object file;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11085 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11086 int bitmap_id;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11087
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
11088 if (FRAME_X_WINDOW (f) == 0)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11089 return 1;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11090
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11091 /* 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
11092 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
11093 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
11094 f->output_data.x->icon_bitmap = 0;
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11095
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11096 if (STRINGP (file))
9542
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
11097 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
11098 else
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
11099 {
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11100 /* 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
11101 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
11102 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
11103 = 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
11104 gnu_width, gnu_height);
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11105
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11106 /* 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
11107 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
11108 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
11109 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
11110 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
11111
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
11112 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
11113 }
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
11114
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
11115 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
11116 f->output_data.x->icon_bitmap = bitmap_id;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11117
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11118 return 0;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11119 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11120
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11121
12074
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
11122 /* 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
11123 Use ICON_NAME as the text. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11124
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11125 int
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11126 x_text_icon (f, icon_name)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11127 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11128 char *icon_name;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11129 {
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
11130 if (FRAME_X_WINDOW (f) == 0)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11131 return 1;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11132
12074
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
11133 #ifdef HAVE_X11R4
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
11134 {
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
11135 XTextProperty text;
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
11136 text.value = (unsigned char *) icon_name;
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
11137 text.encoding = XA_STRING;
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
11138 text.format = 8;
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
11139 text.nitems = strlen (icon_name);
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
11140 #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
11141 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
11142 &text);
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
11143 #else /* not USE_X_TOOLKIT */
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
11144 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
11145 #endif /* not USE_X_TOOLKIT */
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
11146 }
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
11147 #else /* not HAVE_X11R4 */
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
11148 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
11149 #endif /* not HAVE_X11R4 */
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
11150
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11151 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
11152 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
11153 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
11154 x_wm_set_icon_pixmap (f, 0);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11155
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11156 return 0;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11157 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11158
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11159 #define X_ERROR_MESSAGE_SIZE 200
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11160
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11161 /* If non-nil, this should be a string.
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11162 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
11163
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11164 static Lisp_Object x_error_message_string;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11165
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11166 /* 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
11167 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
11168 x_catch_errors is in effect. */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11169
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11170 static void
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11171 x_error_catcher (display, error)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11172 Display *display;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11173 XErrorEvent *error;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11174 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11175 XGetErrorText (display, error->error_code,
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11176 XSTRING (x_error_message_string)->data,
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11177 X_ERROR_MESSAGE_SIZE);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11178 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11179
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11180 /* 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
11181 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
11182 operating on.
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11183
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11184 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
11185 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
11186 stored in x_error_message_string.
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11187
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11188 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
11189 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
11190
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11191 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
11192
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11193 void x_check_errors ();
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11194 static Lisp_Object x_catch_errors_unwind ();
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11195
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11196 int
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11197 x_catch_errors (dpy)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11198 Display *dpy;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11199 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11200 int count = specpdl_ptr - specpdl;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11201
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11202 /* 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
11203 XSync (dpy, False);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11204
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11205 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
11206
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11207 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
11208 XSTRING (x_error_message_string)->data[0] = 0;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11209
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11210 return count;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11211 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11212
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11213 /* 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
11214
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11215 static Lisp_Object
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11216 x_catch_errors_unwind (old_val)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11217 Lisp_Object old_val;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11218 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11219 x_error_message_string = old_val;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11220 return Qnil;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11221 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11222
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11223 /* 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
11224 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
11225 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
11226
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11227 void
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11228 x_check_errors (dpy, format)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11229 Display *dpy;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11230 char *format;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11231 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11232 /* 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
11233 XSync (dpy, False);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11234
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11235 if (XSTRING (x_error_message_string)->data[0])
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11236 error (format, XSTRING (x_error_message_string)->data);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11237 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11238
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11239 /* 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
11240 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
11241
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11242 int
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11243 x_had_errors_p (dpy)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11244 Display *dpy;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11245 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11246 /* 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
11247 XSync (dpy, False);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11248
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11249 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
11250 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11251
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11252 /* 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
11253
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11254 void
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11255 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
11256 Display *dpy;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11257 {
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11258 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
11259 }
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11260
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11261 /* 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
11262 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
11263 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
11264 the corresponding call to x_catch_errors. */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11265
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11266 void
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11267 x_uncatch_errors (dpy, count)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11268 Display *dpy;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11269 int count;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11270 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11271 unbind_to (count, Qnil);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11272 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11273
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11274 #if 0
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11275 static unsigned int x_wire_count;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11276 x_trace_wire ()
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11277 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11278 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
11279 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11280 #endif /* ! 0 */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11281
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11282
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11283 /* 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
11284 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
11285 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
11286 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
11287 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
11288
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11289 static SIGTYPE
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11290 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
11291 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
11292 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11293 #ifdef USG
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11294 /* USG systems forget handlers when they are used;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11295 must reestablish each time */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11296 signal (signalnum, x_connection_signal);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11297 #endif /* USG */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11298 }
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11299
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11300
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11301 /************************************************************************
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11302 Handling X errors
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11303 ************************************************************************/
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11304
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11305 /* Handle the loss of connection to display DPY. ERROR_MESSAGE is
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11306 the text of an error message that lead to the connection loss. */
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
11307
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 555
diff changeset
11308 static SIGTYPE
34673
77cda2c018e5 (x_connection_closed): Prevent being called recursively
Gerd Moellmann <gerd@gnu.org>
parents: 34621
diff changeset
11309 x_connection_closed (dpy, error_message)
77cda2c018e5 (x_connection_closed): Prevent being called recursively
Gerd Moellmann <gerd@gnu.org>
parents: 34621
diff changeset
11310 Display *dpy;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11311 char *error_message;
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 555
diff changeset
11312 {
34673
77cda2c018e5 (x_connection_closed): Prevent being called recursively
Gerd Moellmann <gerd@gnu.org>
parents: 34621
diff changeset
11313 struct x_display_info *dpyinfo = x_display_info_for_display (dpy);
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11314 Lisp_Object frame, tail;
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11315 int count;
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11316 char *msg;
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11317
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11318 msg = (char *) alloca (strlen (error_message) + 1);
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11319 strcpy (msg, error_message);
34949
bbd0e7b5043a (x_connection_closed): Set handling_signal to 0 at
Gerd Moellmann <gerd@gnu.org>
parents: 34869
diff changeset
11320 handling_signal = 0;
bbd0e7b5043a (x_connection_closed): Set handling_signal to 0 at
Gerd Moellmann <gerd@gnu.org>
parents: 34869
diff changeset
11321
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11322 /* Prevent being called recursively because of an error condition
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11323 below. Otherwise, we might end up with printing ``can't find per
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11324 display information'' in the recursive call instead of printing
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11325 the original message here. */
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11326 count = x_catch_errors (dpy);
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11327
34213
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11328 /* We have to close the display to inform Xt that it doesn't
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11329 exist anymore. If we don't, Xt will continue to wait for
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11330 events from the display. As a consequence, a sequence of
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11331
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11332 M-x make-frame-on-display RET :1 RET
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11333 ...kill the new frame, so that we get an IO error...
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11334 M-x make-frame-on-display RET :1 RET
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11335
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11336 will indefinitely wait in Xt for events for display `:1', opened
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11337 in the first class to make-frame-on-display.
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11338
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11339 Closing the display is reported to lead to a bus error on
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11340 OpenWindows in certain situations. I suspect that is a bug
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11341 in OpenWindows. I don't know how to cicumvent it here. */
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11342
17825
281d99590839 (dumpglyphs): Draw glyphs one by one if the font for
Kenichi Handa <handa@m17n.org>
parents: 17720
diff changeset
11343 #ifdef USE_X_TOOLKIT
35309
cb7e1d7b6b67 (x_connection_closed) [USE_X_TOOLKIT]: If
Gerd Moellmann <gerd@gnu.org>
parents: 35276
diff changeset
11344 /* If DPYINFO is null, this means we didn't open the display
cb7e1d7b6b67 (x_connection_closed) [USE_X_TOOLKIT]: If
Gerd Moellmann <gerd@gnu.org>
parents: 35276
diff changeset
11345 in the first place, so don't try to close it. */
cb7e1d7b6b67 (x_connection_closed) [USE_X_TOOLKIT]: If
Gerd Moellmann <gerd@gnu.org>
parents: 35276
diff changeset
11346 if (dpyinfo)
cb7e1d7b6b67 (x_connection_closed) [USE_X_TOOLKIT]: If
Gerd Moellmann <gerd@gnu.org>
parents: 35276
diff changeset
11347 XtCloseDisplay (dpy);
17825
281d99590839 (dumpglyphs): Draw glyphs one by one if the font for
Kenichi Handa <handa@m17n.org>
parents: 17720
diff changeset
11348 #endif
34213
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11349
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11350 /* Indicate that this display is dead. */
29536
4def8a9e785a * xterm.c (x_connection_closed): If dpyinfo is NULL, don't try to
Ken Raeburn <raeburn@raeburn.org>
parents: 29512
diff changeset
11351 if (dpyinfo)
4def8a9e785a * xterm.c (x_connection_closed): If dpyinfo is NULL, don't try to
Ken Raeburn <raeburn@raeburn.org>
parents: 29512
diff changeset
11352 dpyinfo->display = 0;
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
11353
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11354 /* 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
11355 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
11356 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
11357 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11358 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
11359 minibuf_frame
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11360 = 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
11361 if (FRAME_X_P (XFRAME (frame))
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
11362 && FRAME_X_P (XFRAME (minibuf_frame))
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
11363 && ! EQ (frame, minibuf_frame)
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
11364 && 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
11365 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
11366 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11367
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11368 /* 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
11369 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
11370 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
11371 FOR_EACH_FRAME (tail, frame)
10921
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
11372 if (FRAME_X_P (XFRAME (frame))
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
11373 && 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
11374 {
0d37c1e81c0d (x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents: 11901
diff changeset
11375 /* 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
11376 trying to find a replacement. */
0d37c1e81c0d (x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents: 11901
diff changeset
11377 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
11378 Fdelete_frame (frame, Qt);
0d37c1e81c0d (x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents: 11901
diff changeset
11379 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11380
13727
9eb09adbcb38 (x_connection_closed): Don't delete dpyinfo if it's null.
Karl Heuer <kwzh@gnu.org>
parents: 13633
diff changeset
11381 if (dpyinfo)
9eb09adbcb38 (x_connection_closed): Don't delete dpyinfo if it's null.
Karl Heuer <kwzh@gnu.org>
parents: 13633
diff changeset
11382 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
11383
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11384 x_uncatch_errors (dpy, count);
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11385
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11386 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
11387 {
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11388 fprintf (stderr, "%s\n", msg);
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11389 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
11390 exit (70);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11391 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11392
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11393 /* 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
11394 #ifdef SIGIO
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11395 sigunblock (sigmask (SIGIO));
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11396 #endif
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11397 sigunblock (sigmask (SIGALRM));
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11398 TOTALLY_UNBLOCK_INPUT;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11399
15526
926ef4afc174 (x_connection_closed): Call clear_waiting_for_input.
Richard M. Stallman <rms@gnu.org>
parents: 15521
diff changeset
11400 clear_waiting_for_input ();
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11401 error ("%s", msg);
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11402 }
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11403
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 555
diff changeset
11404
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11405 /* 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
11406 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
11407 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
11408
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11409 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
11410 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
11411 Display *display;
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
11412 XErrorEvent *error;
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
11413 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11414 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
11415
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
11416 /* 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
11417 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
11418
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
11419 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
11420 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
11421 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
11422 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
11423 }
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
11424
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11425
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11426 /* 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
11427 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
11428
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11429 static int
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11430 x_error_handler (display, error)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11431 Display *display;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11432 XErrorEvent *error;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11433 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11434 if (! NILP (x_error_message_string))
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11435 x_error_catcher (display, error);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11436 else
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11437 x_error_quitter (display, error);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11438 return 0;
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11439 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11440
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11441 /* 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
11442 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
11443 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
11444
1875
f569bc4e9b8f * xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents: 1841
diff changeset
11445 static int
f569bc4e9b8f * xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents: 1841
diff changeset
11446 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
11447 Display *display;
f569bc4e9b8f * xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents: 1841
diff changeset
11448 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11449 char buf[256];
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11450
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11451 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
11452 x_connection_closed (display, buf);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11453 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
11454 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11455
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
11456 /* 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
11457
8291
9c6ddd14996b (struct font_info): New field full_name.
Richard M. Stallman <rms@gnu.org>
parents: 8279
diff changeset
11458 /* 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
11459 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
11460 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
11461 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
11462
3076
e3b3c67cf203 Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents: 3066
diff changeset
11463 Lisp_Object
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11464 x_new_font (f, fontname)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11465 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11466 register char *fontname;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11467 {
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11468 struct font_info *fontp
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
11469 = FS_LOAD_FONT (f, 0, fontname, -1);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11470
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11471 if (!fontp)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11472 return Qnil;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11473
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11474 f->output_data.x->font = (XFontStruct *) (fontp->font);
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
11475 f->output_data.x->baseline_offset = fontp->baseline_offset;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11476 f->output_data.x->fontset = -1;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11477
9167
8ad448b29c1c (x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents: 9101
diff changeset
11478 /* 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
11479 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
11480 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11481 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
11482 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
11483 }
8ad448b29c1c (x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents: 9101
diff changeset
11484 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
11485 {
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
11486 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
11487 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
11488 }
9167
8ad448b29c1c (x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents: 9101
diff changeset
11489
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11490 /* 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
11491 if (FRAME_X_WINDOW (f) != 0)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11492 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11493 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
11494 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
11495 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
11496 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
11497 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
11498 f->output_data.x->font->fid);
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11499
6767
8fbcee1c2059 (stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents: 6757
diff changeset
11500 frame_update_line_height (f);
35506
5ad77d538e08 (x_new_font): Don't change a tooltip's size.
Gerd Moellmann <gerd@gnu.org>
parents: 35487
diff changeset
11501
5ad77d538e08 (x_new_font): Don't change a tooltip's size.
Gerd Moellmann <gerd@gnu.org>
parents: 35487
diff changeset
11502 /* Don't change the size of a tip frame; there's no point in
5ad77d538e08 (x_new_font): Don't change a tooltip's size.
Gerd Moellmann <gerd@gnu.org>
parents: 35487
diff changeset
11503 doing it because it's done in Fx_show_tip, and it leads to
5ad77d538e08 (x_new_font): Don't change a tooltip's size.
Gerd Moellmann <gerd@gnu.org>
parents: 35487
diff changeset
11504 problems because the tip frame has no widget. */
5ad77d538e08 (x_new_font): Don't change a tooltip's size.
Gerd Moellmann <gerd@gnu.org>
parents: 35487
diff changeset
11505 if (NILP (tip_frame) || XFRAME (tip_frame) != f)
5ad77d538e08 (x_new_font): Don't change a tooltip's size.
Gerd Moellmann <gerd@gnu.org>
parents: 35487
diff changeset
11506 x_set_window_size (f, 0, f->width, f->height);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11507 }
6767
8fbcee1c2059 (stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents: 6757
diff changeset
11508 else
8fbcee1c2059 (stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents: 6757
diff changeset
11509 /* 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
11510 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
11511 f->output_data.x->line_height = FONT_HEIGHT (f->output_data.x->font);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11512
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11513 return build_string (fontp->full_name);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11514 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11515
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11516 /* 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
11517 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
11518 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
11519 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
11520
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11521 Lisp_Object
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11522 x_new_fontset (f, fontsetname)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11523 struct frame *f;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11524 char *fontsetname;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11525 {
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
11526 int fontset = fs_query_fontset (build_string (fontsetname), 0);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11527 Lisp_Object result;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11528
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11529 if (fontset < 0)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11530 return Qnil;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11531
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
11532 if (f->output_data.x->fontset == fontset)
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
11533 /* 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
11534 to do. */
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
11535 return fontset_name (fontset);
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
11536
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
11537 result = x_new_font (f, (XSTRING (fontset_ascii (fontset))->data));
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11538
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11539 if (!STRINGP (result))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11540 /* Can't load ASCII font. */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11541 return Qnil;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11542
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11543 /* 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
11544 f->output_data.x->fontset = fontset;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11545
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11546 #ifdef HAVE_X_I18N
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11547 if (FRAME_XIC (f)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11548 && (FRAME_XIC_STYLE (f) & (XIMPreeditPosition | XIMStatusArea)))
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
11549 xic_set_xfontset (f, XSTRING (fontset_ascii (fontset))->data);
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11550 #endif
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11551
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11552 return build_string (fontsetname);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11553 }
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11554
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11555
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11556 /***********************************************************************
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11557 X Input Methods
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11558 ***********************************************************************/
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11559
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11560 #ifdef HAVE_X_I18N
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11561
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11562 #ifdef HAVE_X11R6
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11563
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11564 /* XIM destroy callback function, which is called whenever the
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11565 connection to input method XIM dies. CLIENT_DATA contains a
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11566 pointer to the x_display_info structure corresponding to XIM. */
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11567
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11568 static void
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11569 xim_destroy_callback (xim, client_data, call_data)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11570 XIM xim;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11571 XPointer client_data;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11572 XPointer call_data;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11573 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11574 struct x_display_info *dpyinfo = (struct x_display_info *) client_data;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11575 Lisp_Object frame, tail;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11576
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11577 BLOCK_INPUT;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11578
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11579 /* No need to call XDestroyIC.. */
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11580 FOR_EACH_FRAME (tail, frame)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11581 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11582 struct frame *f = XFRAME (frame);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11583 if (FRAME_X_DISPLAY_INFO (f) == dpyinfo)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11584 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11585 FRAME_XIC (f) = NULL;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11586 if (FRAME_XIC_FONTSET (f))
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11587 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11588 XFreeFontSet (FRAME_X_DISPLAY (f), FRAME_XIC_FONTSET (f));
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11589 FRAME_XIC_FONTSET (f) = NULL;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11590 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11591 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11592 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11593
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11594 /* No need to call XCloseIM. */
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11595 dpyinfo->xim = NULL;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11596 XFree (dpyinfo->xim_styles);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11597 UNBLOCK_INPUT;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11598 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11599
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11600 #endif /* HAVE_X11R6 */
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11601
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11602 /* Open the connection to the XIM server on display DPYINFO.
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11603 RESOURCE_NAME is the resource name Emacs uses. */
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11604
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11605 static void
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11606 xim_open_dpy (dpyinfo, resource_name)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11607 struct x_display_info *dpyinfo;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11608 char *resource_name;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11609 {
29948
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
11610 #ifdef USE_XIM
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11611 XIM xim;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11612
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11613 xim = XOpenIM (dpyinfo->display, dpyinfo->xrdb, resource_name, EMACS_CLASS);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11614 dpyinfo->xim = xim;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11615
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11616 if (xim)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11617 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11618 #ifdef HAVE_X11R6
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11619 XIMCallback destroy;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11620 #endif
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11621
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11622 /* Get supported styles and XIM values. */
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11623 XGetIMValues (xim, XNQueryInputStyle, &dpyinfo->xim_styles, NULL);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11624
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11625 #ifdef HAVE_X11R6
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11626 destroy.callback = xim_destroy_callback;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11627 destroy.client_data = (XPointer)dpyinfo;
29894
691fe247f018 Don't include sys/types.h unconditionally. Don't protect its inclusion
Dave Love <fx@gnu.org>
parents: 29749
diff changeset
11628 /* This isn't prptotyped in OSF 5.0. */
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11629 XSetIMValues (xim, XNDestroyCallback, &destroy, NULL);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11630 #endif
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11631 }
29948
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
11632
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
11633 #else /* not USE_XIM */
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
11634 dpyinfo->xim = NULL;
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
11635 #endif /* not USE_XIM */
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11636 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11637
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11638
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
11639 #ifdef HAVE_X11R6_XIM
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11640
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11641 struct xim_inst_t
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11642 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11643 struct x_display_info *dpyinfo;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11644 char *resource_name;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11645 };
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11646
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11647 /* XIM instantiate callback function, which is called whenever an XIM
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11648 server is available. DISPLAY is teh display of the XIM.
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11649 CLIENT_DATA contains a pointer to an xim_inst_t structure created
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11650 when the callback was registered. */
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11651
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11652 static void
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11653 xim_instantiate_callback (display, client_data, call_data)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11654 Display *display;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11655 XPointer client_data;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11656 XPointer call_data;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11657 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11658 struct xim_inst_t *xim_inst = (struct xim_inst_t *) client_data;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11659 struct x_display_info *dpyinfo = xim_inst->dpyinfo;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11660
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11661 /* We don't support multiple XIM connections. */
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11662 if (dpyinfo->xim)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11663 return;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11664
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11665 xim_open_dpy (dpyinfo, xim_inst->resource_name);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11666
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11667 /* Create XIC for the existing frames on the same display, as long
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11668 as they have no XIC. */
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11669 if (dpyinfo->xim && dpyinfo->reference_count > 0)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11670 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11671 Lisp_Object tail, frame;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11672
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11673 BLOCK_INPUT;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11674 FOR_EACH_FRAME (tail, frame)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11675 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11676 struct frame *f = XFRAME (frame);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11677
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11678 if (FRAME_X_DISPLAY_INFO (f) == xim_inst->dpyinfo)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11679 if (FRAME_XIC (f) == NULL)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11680 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11681 create_frame_xic (f);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11682 if (FRAME_XIC_STYLE (f) & XIMStatusArea)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11683 xic_set_statusarea (f);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11684 if (FRAME_XIC_STYLE (f) & XIMPreeditPosition)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11685 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11686 struct window *w = XWINDOW (f->selected_window);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11687 xic_set_preeditarea (w, w->cursor.x, w->cursor.y);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11688 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11689 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11690 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11691
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11692 UNBLOCK_INPUT;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11693 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11694 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11695
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
11696 #endif /* HAVE_X11R6_XIM */
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11697
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11698
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11699 /* Open a connection to the XIM server on display DPYINFO.
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11700 RESOURCE_NAME is the resource name for Emacs. On X11R5, open the
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11701 connection only at the first time. On X11R6, open the connection
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11702 in the XIM instantiate callback function. */
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11703
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11704 static void
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11705 xim_initialize (dpyinfo, resource_name)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11706 struct x_display_info *dpyinfo;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11707 char *resource_name;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11708 {
29948
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
11709 #ifdef USE_XIM
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
11710 #ifdef HAVE_X11R6_XIM
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11711 struct xim_inst_t *xim_inst;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11712 int len;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11713
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11714 dpyinfo->xim = NULL;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11715 xim_inst = (struct xim_inst_t *) xmalloc (sizeof (struct xim_inst_t));
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11716 xim_inst->dpyinfo = dpyinfo;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11717 len = strlen (resource_name);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11718 xim_inst->resource_name = (char *) xmalloc (len + 1);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11719 bcopy (resource_name, xim_inst->resource_name, len + 1);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11720 XRegisterIMInstantiateCallback (dpyinfo->display, dpyinfo->xrdb,
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11721 resource_name, EMACS_CLASS,
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11722 xim_instantiate_callback,
29435
28c6b6d0ed6b (x_calc_absolute_position): Declare nchildren unsigned.
Dave Love <fx@gnu.org>
parents: 29393
diff changeset
11723 /* Fixme: This is XPointer in
28c6b6d0ed6b (x_calc_absolute_position): Declare nchildren unsigned.
Dave Love <fx@gnu.org>
parents: 29393
diff changeset
11724 XFree86 but (XPointer *) on
28c6b6d0ed6b (x_calc_absolute_position): Declare nchildren unsigned.
Dave Love <fx@gnu.org>
parents: 29393
diff changeset
11725 Tru64, at least. */
28c6b6d0ed6b (x_calc_absolute_position): Declare nchildren unsigned.
Dave Love <fx@gnu.org>
parents: 29393
diff changeset
11726 (XPointer) xim_inst);
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
11727 #else /* not HAVE_X11R6_XIM */
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11728 dpyinfo->xim = NULL;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11729 xim_open_dpy (dpyinfo, resource_name);
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
11730 #endif /* not HAVE_X11R6_XIM */
29948
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
11731
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
11732 #else /* not USE_XIM */
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
11733 dpyinfo->xim = NULL;
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
11734 #endif /* not USE_XIM */
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11735 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11736
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11737
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11738 /* Close the connection to the XIM server on display DPYINFO. */
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11739
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11740 static void
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11741 xim_close_dpy (dpyinfo)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11742 struct x_display_info *dpyinfo;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11743 {
29948
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
11744 #ifdef USE_XIM
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
11745 #ifdef HAVE_X11R6_XIM
34213
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11746 if (dpyinfo->display)
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11747 XUnregisterIMInstantiateCallback (dpyinfo->display, dpyinfo->xrdb,
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11748 NULL, EMACS_CLASS,
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11749 xim_instantiate_callback, NULL);
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
11750 #endif /* not HAVE_X11R6_XIM */
34213
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11751 if (dpyinfo->display)
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11752 XCloseIM (dpyinfo->xim);
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11753 dpyinfo->xim = NULL;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11754 XFree (dpyinfo->xim_styles);
29948
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
11755 #endif /* USE_XIM */
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11756 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11757
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
11758 #endif /* not HAVE_X11R6_XIM */
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11759
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11760
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11761
14826
eec0abb31126 Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 14801
diff changeset
11762 /* Calculate the absolute position in frame F
eec0abb31126 Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 14801
diff changeset
11763 from its current recorded position values and gravity. */
eec0abb31126 Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 14801
diff changeset
11764
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
11765 void
7264
a701bffa0f9d (x_calc_absolute_position): Use size_hint_flags.
Richard M. Stallman <rms@gnu.org>
parents: 7262
diff changeset
11766 x_calc_absolute_position (f)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11767 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11768 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11769 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
11770 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
11771 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
11772 int this_window;
507a45c7e911 (x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents: 11807
diff changeset
11773
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11774 /* 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
11775 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
11776 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
11777 return;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11778
11896
507a45c7e911 (x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents: 11807
diff changeset
11779 #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
11780 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
11781 #else
507a45c7e911 (x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents: 11807
diff changeset
11782 this_window = FRAME_X_WINDOW (f);
507a45c7e911 (x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents: 11807
diff changeset
11783 #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
11784
70247ce8b381 (x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents: 4493
diff changeset
11785 /* 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
11786 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
11787 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
11788 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
11789 {
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11790 int count;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11791
4630
70247ce8b381 (x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents: 4493
diff changeset
11792 BLOCK_INPUT;
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11793 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
11794 while (1)
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11795 {
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11796 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
11797 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
11798
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11799 /* 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
11800 this_window,
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11801 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
11802
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11803 /* 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
11804 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
11805
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11806 /* Child of win. */
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11807 &child);
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11808 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
11809 {
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11810 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
11811 Window *newchildren;
29435
28c6b6d0ed6b (x_calc_absolute_position): Declare nchildren unsigned.
Dave Love <fx@gnu.org>
parents: 29393
diff changeset
11812 unsigned int nchildren;
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11813
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11814 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
11815 &newparent, &newchildren, &nchildren))
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11816 break;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11817
23107
44eda932afcf (x_calc_absolute_position): Cast argument to XFree, in
Karl Heuer <kwzh@gnu.org>
parents: 23095
diff changeset
11818 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
11819
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11820 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
11821 }
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11822 else
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11823 break;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11824 }
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11825
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11826 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
11827 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
11828 }
70247ce8b381 (x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents: 4493
diff changeset
11829
70247ce8b381 (x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents: 4493
diff changeset
11830 /* 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
11831 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
11832 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
11833 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
11834 - 2 * f->output_data.x->border_width - win_x
eec0abb31126 Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 14801
diff changeset
11835 - PIXEL_WIDTH (f)
eec0abb31126 Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 14801
diff changeset
11836 + f->output_data.x->left_pos);
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11837
34099
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
11838 {
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
11839 int height = PIXEL_HEIGHT (f);
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
11840
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
11841 #if defined USE_X_TOOLKIT && defined USE_MOTIF
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
11842 /* Something is fishy here. When using Motif, starting Emacs with
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
11843 `-g -0-0', the frame appears too low by a few pixels.
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
11844
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
11845 This seems to be so because initially, while Emacs is starting,
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
11846 the column widget's height and the frame's pixel height are
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
11847 different. The column widget's height is the right one. In
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
11848 later invocations, when Emacs is up, the frame's pixel height
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
11849 is right, though.
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
11850
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
11851 It's not obvious where the initial small difference comes from.
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
11852 2000-12-01, gerd. */
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
11853
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
11854 XtVaGetValues (f->output_data.x->column_widget, XtNheight, &height, NULL);
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
11855 #endif
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
11856
7262
68fc80bf10df (x_wm_set_size_hint): Don't try to handle negative positions.
Richard M. Stallman <rms@gnu.org>
parents: 7210
diff changeset
11857 if (flags & YNegative)
34099
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
11858 f->output_data.x->top_pos = (FRAME_X_DISPLAY_INFO (f)->height
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
11859 - 2 * f->output_data.x->border_width
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
11860 - win_y
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
11861 - height
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
11862 + f->output_data.x->top_pos);
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
11863 }
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
11864
7409
fe56a02838ba (x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents: 7346
diff changeset
11865 /* 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
11866 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
11867 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
11868 f->output_data.x->size_hint_flags &= ~ (XNegative | YNegative);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11869 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11870
7409
fe56a02838ba (x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents: 7346
diff changeset
11871 /* 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
11872 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
11873 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
11874 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
11875 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
11876
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
11877 void
6934
e0ab4f59004e (dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents: 6883
diff changeset
11878 x_set_offset (f, xoff, yoff, change_gravity)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11879 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11880 register int xoff, yoff;
6934
e0ab4f59004e (dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents: 6883
diff changeset
11881 int change_gravity;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11882 {
11901
8ecc60a02138 (x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents: 11896
diff changeset
11883 int modified_top, modified_left;
8ecc60a02138 (x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents: 11896
diff changeset
11884
11988
a1ce6f699967 (x_set_offset): Distinguish CHANGE_GRAVITY < 0 case.
Karl Heuer <kwzh@gnu.org>
parents: 11953
diff changeset
11885 if (change_gravity > 0)
7409
fe56a02838ba (x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents: 7346
diff changeset
11886 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11887 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
11888 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
11889 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
11890 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
11891 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
11892 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
11893 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
11894 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
11895 }
7264
a701bffa0f9d (x_calc_absolute_position): Use size_hint_flags.
Richard M. Stallman <rms@gnu.org>
parents: 7262
diff changeset
11896 x_calc_absolute_position (f);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11897
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11898 BLOCK_INPUT;
11915
e2ab839155e1 (XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents: 11904
diff changeset
11899 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
11900
17519
5aa7011aa3d5 (x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents: 17371
diff changeset
11901 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
11902 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
11903 #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
11904 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
11905 /* 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
11906 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
11907 if (change_gravity != 0)
11901
8ecc60a02138 (x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents: 11896
diff changeset
11908 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11909 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
11910 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
11911 }
17519
5aa7011aa3d5 (x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents: 17371
diff changeset
11912 #endif
11901
8ecc60a02138 (x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents: 11896
diff changeset
11913
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
11914 #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
11915 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
11916 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
11917 #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
11918 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
11919 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
11920 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11921 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11922 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11923
35487
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
11924
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
11925 /* Change the size of frame F's X window to COLS/ROWS in the case F
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
11926 doesn't have a widget. If CHANGE_GRAVITY is 1, we change to
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
11927 top-left-corner window gravity for this size change and subsequent
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
11928 size changes. Otherwise we leave the window gravity unchanged. */
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
11929
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
11930 static void
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
11931 x_set_window_size_1 (f, change_gravity, cols, rows)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11932 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
11933 int change_gravity;
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
11934 int cols, rows;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11935 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11936 int pixelwidth, pixelheight;
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
11937
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
11938 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
11939 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
11940 = (!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
11941 ? 0
8ad448b29c1c (x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents: 9101
diff changeset
11942 : 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
11943 ? 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
11944 : (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
11945 f->output_data.x->flags_areas_extra
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
11946 = 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
11947 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
11948 pixelheight = CHAR_TO_PIXEL_HEIGHT (f, rows);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11949
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11950 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
11951 x_wm_set_size_hint (f, (long) 0, 0);
8781
98741404d3e0 Delete X11 conditionals.
Richard M. Stallman <rms@gnu.org>
parents: 8724
diff changeset
11952
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
11953 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
11954 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
11955 pixelwidth, pixelheight);
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
11956
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
11957 /* 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
11958 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
11959 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
11960 ConfigureNotify event gets here.
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
11961
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
11962 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
11963 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
11964 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
11965 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
11966 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
11967
1c02364724aa (x_set_window_size): When calling change_frame_size, specify 1 for DELAY.
Richard M. Stallman <rms@gnu.org>
parents: 25101
diff changeset
11968 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
11969 a BLOCK_INPUT. */
25360
2f3ad0a21be5 Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents: 25328
diff changeset
11970 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
11971 PIXEL_WIDTH (f) = pixelwidth;
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
11972 PIXEL_HEIGHT (f) = pixelheight;
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
11973
14692
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
11974 /* 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
11975 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
11976 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
11977 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
11978 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
11979
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
11980 XFlush (FRAME_X_DISPLAY (f));
35487
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
11981 }
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
11982
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
11983
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
11984 /* Call this to change the size of frame F's x-window.
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
11985 If CHANGE_GRAVITY is 1, we change to top-left-corner window gravity
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
11986 for this size change and subsequent size changes.
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
11987 Otherwise we leave the window gravity unchanged. */
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
11988
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
11989 void
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
11990 x_set_window_size (f, change_gravity, cols, rows)
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
11991 struct frame *f;
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
11992 int change_gravity;
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
11993 int cols, rows;
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
11994 {
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
11995 BLOCK_INPUT;
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
11996
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
11997 #ifdef USE_X_TOOLKIT
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
11998
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
11999 if (f->output_data.x->widget != None)
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12000 {
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12001 /* The x and y position of the widget is clobbered by the
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12002 call to XtSetValues within EmacsFrameSetCharSize.
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12003 This is a real kludge, but I don't understand Xt so I can't
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12004 figure out a correct fix. Can anyone else tell me? -- rms. */
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12005 int xpos = f->output_data.x->widget->core.x;
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12006 int ypos = f->output_data.x->widget->core.y;
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12007 EmacsFrameSetCharSize (f->output_data.x->edit_widget, cols, rows);
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12008 f->output_data.x->widget->core.x = xpos;
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12009 f->output_data.x->widget->core.y = ypos;
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12010 }
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12011 else
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12012 x_set_window_size_1 (f, change_gravity, cols, rows);
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12013
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12014 #else /* not USE_X_TOOLKIT */
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12015
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12016 x_set_window_size_1 (f, change_gravity, cols, rows);
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12017
14692
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
12018 #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
12019
7651
1569a13efdcd (x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents: 7602
diff changeset
12020 /* 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
12021 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
12022
14692
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
12023 /* 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
12024 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
12025 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
12026 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
12027 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
12028
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12029 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12030 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12031
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
12032 /* Mouse warping. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12033
7026
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
12034 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12035 x_set_mouse_position (f, x, y)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12036 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12037 int x, y;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12038 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12039 int pix_x, pix_y;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12040
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
12041 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
12042 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
12043
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
12044 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
12045 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
12046
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
12047 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
12048 if (pix_y > PIXEL_HEIGHT (f)) pix_y = PIXEL_HEIGHT (f);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12049
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12050 BLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12051
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12052 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
12053 0, 0, 0, 0, pix_x, pix_y);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12054 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12055 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12056
7026
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
12057 /* 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
12058
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
12059 void
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
12060 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
12061 struct frame *f;
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
12062 int pix_x, pix_y;
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
12063 {
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
12064 BLOCK_INPUT;
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
12065
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12066 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
12067 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
12068 UNBLOCK_INPUT;
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
12069 }
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
12070
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
12071 /* focus shifting, raising and lowering. */
7026
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
12072
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12073 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12074 x_focus_on_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12075 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12076 {
5156
fd78458b8c43 (XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents: 5018
diff changeset
12077 #if 0 /* This proves to be unpleasant. */
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12078 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
12079 #endif
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
12080 #if 0
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
12081 /* I don't think that the ICCCM allows programs to do things like this
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
12082 without the interaction of the window manager. Whatever you end up
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12083 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
12084 XSetInputFocus (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12085 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
12086 #endif /* ! 0 */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12087 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12088
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12089 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12090 x_unfocus_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12091 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12092 {
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
12093 #if 0
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12094 /* 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
12095 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
12096 XSetInputFocus (FRAME_X_DISPLAY (f), PointerRoot,
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12097 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
12098 #endif /* ! 0 */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12099 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12100
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12101 /* Raise frame F. */
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12102
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12103 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12104 x_raise_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12105 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12106 {
1658
452ba03935d7 * xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents: 1530
diff changeset
12107 if (f->async_visible)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12108 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12109 BLOCK_INPUT;
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12110 #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
12111 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
12112 #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
12113 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
12114 #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
12115 XFlush (FRAME_X_DISPLAY (f));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12116 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12117 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12118 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12119
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12120 /* Lower frame F. */
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12121
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12122 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12123 x_lower_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12124 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12125 {
1658
452ba03935d7 * xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents: 1530
diff changeset
12126 if (f->async_visible)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12127 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12128 BLOCK_INPUT;
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12129 #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
12130 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
12131 #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
12132 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
12133 #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
12134 XFlush (FRAME_X_DISPLAY (f));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12135 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12136 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12137 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12138
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
12139 static void
14411
bac274f178b0 (XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents: 14305
diff changeset
12140 XTframe_raise_lower (f, raise_flag)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
12141 FRAME_PTR f;
14411
bac274f178b0 (XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents: 14305
diff changeset
12142 int raise_flag;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
12143 {
14411
bac274f178b0 (XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents: 14305
diff changeset
12144 if (raise_flag)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
12145 x_raise_frame (f);
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
12146 else
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
12147 x_lower_frame (f);
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
12148 }
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
12149
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
12150 /* Change of visibility. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12151
12192
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
12152 /* 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
12153 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
12154 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
12155 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
12156 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
12157 finishes with it. */
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
12158
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12159 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12160 x_make_frame_visible (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12161 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12162 {
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
12163 Lisp_Object type;
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
12164 int original_top, original_left;
31948
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
12165 int retry_count = 2;
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
12166
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
12167 retry:
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12168
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
12169 BLOCK_INPUT;
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
12170
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
12171 type = x_icon_type (f);
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
12172 if (!NILP (type))
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
12173 x_bitmap_icon (f, type);
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
12174
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12175 if (! FRAME_VISIBLE_P (f))
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12176 {
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
12177 /* 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
12178 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
12179 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
12180 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
12181 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
12182 && ! 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
12183 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
12184
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
12185 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
12186
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
12187 if (! EQ (Vx_no_window_manager, Qt))
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12188 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
12189 #ifdef USE_X_TOOLKIT
7167
2fa74c48e4e5 (x_make_frame_visible): Use XtMapWidget, not XtPopup.
Richard M. Stallman <rms@gnu.org>
parents: 7128
diff changeset
12190 /* 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
12191 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
12192 #else /* not USE_X_TOOLKIT */
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12193 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
12194 #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
12195 #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
12196 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
12197 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
12198 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
12199 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
12200 #endif
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
12201 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12202
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12203 XFlush (FRAME_X_DISPLAY (f));
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
12204
7959
224440646fa7 (make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents: 7935
diff changeset
12205 /* 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
12206 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
12207 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
12208 {
224440646fa7 (make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents: 7935
diff changeset
12209 Lisp_Object frame;
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12210 int count;
18528
73f4d9258f04 (x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents: 18347
diff changeset
12211 /* 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
12212 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
12213 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
12214 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
12215
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
12216 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
12217 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
12218
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
12219 /* This must come after we set COUNT. */
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
12220 UNBLOCK_INPUT;
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
12221
22907
43e290c6fb19 (x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents: 22773
diff changeset
12222 /* 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
12223
18008
d25d2472df51 (XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents: 17963
diff changeset
12224 /* 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
12225 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
12226 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
12227 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
12228
73f4d9258f04 (x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents: 18347
diff changeset
12229 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
12230 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
12231 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
12232
18630
3e414b9da546 (x_make_frame_visible): Don't move the frame
Richard M. Stallman <rms@gnu.org>
parents: 18528
diff changeset
12233 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
12234 && 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
12235 && previously_visible)
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
12236 {
22907
43e290c6fb19 (x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents: 22773
diff changeset
12237 Drawable rootw;
43e290c6fb19 (x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents: 22773
diff changeset
12238 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
12239 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
12240
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
12241 BLOCK_INPUT;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
12242
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12243 /* 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
12244 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
12245 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
12246 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
12247 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
12248 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
12249 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
12250 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
12251 &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
12252
43e290c6fb19 (x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents: 22773
diff changeset
12253 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
12254 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
12255 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
12256
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
12257 UNBLOCK_INPUT;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
12258 }
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
12259
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
12260 XSETFRAME (frame, f);
9337
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
12261
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12262 /* Wait until the frame is visible. Process X events until a
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12263 MapNotify event has been seen, or until we think we won't get a
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12264 MapNotify at all.. */
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12265 for (count = input_signal_count + 10;
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12266 input_signal_count < count && !FRAME_VISIBLE_P (f);)
8098
e44c31d682b1 (x_draw_box): Use curs_x and curs_y, not f->cursor_[xy].
Richard M. Stallman <rms@gnu.org>
parents: 8036
diff changeset
12267 {
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12268 /* Force processing of queued events. */
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12269 x_sync (f);
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12270
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12271 /* Machines that do polling rather than SIGIO have been
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12272 observed to go into a busy-wait here. So we'll fake an
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12273 alarm signal to let the handler know that there's something
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12274 to be read. We used to raise a real alarm, but it seems
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12275 that the handler isn't always enabled here. This is
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12276 probably a bug. */
8682
42f95b1368ea (x_make_frame_visible): Call input_polling_used.
Richard M. Stallman <rms@gnu.org>
parents: 8652
diff changeset
12277 if (input_polling_used ())
8652
c2c1a477ddd5 Include keyboard.h.
Richard M. Stallman <rms@gnu.org>
parents: 8634
diff changeset
12278 {
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12279 /* It could be confusing if a real alarm arrives while
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12280 processing the fake one. Turn it off and let the
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12281 handler reset it. */
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
12282 extern void poll_for_input_1 P_ ((void));
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
12283 int old_poll_suppress_count = poll_suppress_count;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
12284 poll_suppress_count = 1;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
12285 poll_for_input_1 ();
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
12286 poll_suppress_count = old_poll_suppress_count;
8652
c2c1a477ddd5 Include keyboard.h.
Richard M. Stallman <rms@gnu.org>
parents: 8634
diff changeset
12287 }
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12288
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12289 /* See if a MapNotify event has been processed. */
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12290 FRAME_SAMPLE_VISIBILITY (f);
8098
e44c31d682b1 (x_draw_box): Use curs_x and curs_y, not f->cursor_[xy].
Richard M. Stallman <rms@gnu.org>
parents: 8036
diff changeset
12291 }
31948
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
12292
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
12293 /* 2000-09-28: In
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
12294
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
12295 (let ((f (selected-frame)))
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
12296 (iconify-frame f)
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
12297 (raise-frame f))
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
12298
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
12299 the frame is not raised with various window managers on
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
12300 FreeBSD, Linux and Solaris. It turns out that, for some
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
12301 unknown reason, the call to XtMapWidget is completely ignored.
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
12302 Mapping the widget a second time works. */
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
12303
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
12304 if (!FRAME_VISIBLE_P (f) && --retry_count > 0)
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
12305 goto retry;
7959
224440646fa7 (make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents: 7935
diff changeset
12306 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12307 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12308
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12309 /* Change from mapped state to withdrawn state. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12310
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
12311 /* Make the frame visible (mapped and not iconified). */
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
12312
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12313 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12314 x_make_frame_invisible (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12315 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12316 {
7602
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
12317 Window window;
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
12318
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
12319 #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
12320 /* 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
12321 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
12322 #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
12323 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
12324 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12325
3284
a47979ffad1e (XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents: 3282
diff changeset
12326 /* 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
12327 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
12328 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
12329
6983
b18e5c09d7c3 (XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents: 6941
diff changeset
12330 #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
12331 if (! f->async_visible && ! f->async_iconified)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12332 return;
6983
b18e5c09d7c3 (XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents: 6941
diff changeset
12333 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12334
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12335 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
12336
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12337 /* 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
12338 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
12339 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
12340 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
12341 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
12342 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
12343
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
12344 #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
12345
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12346 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
12347 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
12348 {
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
12349 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
12350 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
12351 }
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
12352 #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
12353
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
12354 /* Tell the window manager what we're going to do. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12355 if (! EQ (Vx_no_window_manager, Qt))
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12356 {
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12357 XEvent unmap;
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12358
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12359 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
12360 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
12361 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
12362 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
12363 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
12364 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
12365 False,
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12366 SubstructureRedirectMaskSubstructureNotifyMask,
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12367 &unmap))
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12368 {
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12369 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
12370 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
12371 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12372 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12373
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12374 /* 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
12375 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
12376 #endif /* ! defined (HAVE_X11R4) */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12377
6983
b18e5c09d7c3 (XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents: 6941
diff changeset
12378 /* 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
12379 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
12380 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
12381 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
12382 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
12383 f->visible = 0;
b18e5c09d7c3 (XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents: 6941
diff changeset
12384 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
12385 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
12386 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
12387
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12388 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
12389
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12390 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12391 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12392
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12393 /* Change window state from mapped to iconified. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12394
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12395 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12396 x_iconify_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12397 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12398 {
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12399 int result;
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
12400 Lisp_Object type;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12401
3284
a47979ffad1e (XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents: 3282
diff changeset
12402 /* 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
12403 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
12404 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
12405
1658
452ba03935d7 * xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents: 1530
diff changeset
12406 if (f->async_iconified)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12407 return;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12408
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
12409 BLOCK_INPUT;
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
12410
13627
8873aa3451dd (XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents: 13598
diff changeset
12411 FRAME_SAMPLE_VISIBILITY (f);
8873aa3451dd (XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents: 13598
diff changeset
12412
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
12413 type = x_icon_type (f);
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
12414 if (!NILP (type))
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
12415 x_bitmap_icon (f, type);
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
12416
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12417 #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
12418
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
12419 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
12420 {
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
12421 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
12422 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
12423 /* 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
12424 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
12425 /* 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
12426 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
12427 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
12428 f->iconified = 1;
16753
ab63a77c3a23 (x_iconify_frame): Clear visible when we set iconified.
Richard M. Stallman <rms@gnu.org>
parents: 16491
diff changeset
12429 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
12430 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
12431 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
12432 UNBLOCK_INPUT;
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
12433 return;
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
12434 }
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
12435
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12436 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
12437 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
12438 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
12439 UNBLOCK_INPUT;
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12440
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12441 if (!result)
7602
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
12442 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
12443
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12444 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
12445 f->async_visible = 0;
ab63a77c3a23 (x_iconify_frame): Clear visible when we set iconified.
Richard M. Stallman <rms@gnu.org>
parents: 16491
diff changeset
12446
5740
48da4ed089e9 (x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents: 5737
diff changeset
12447
48da4ed089e9 (x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents: 5737
diff changeset
12448 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
12449 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
12450 UNBLOCK_INPUT;
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12451 #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
12452
7738
a810335742bb (x_iconify_frame): Call x_set_offset,
Richard M. Stallman <rms@gnu.org>
parents: 7706
diff changeset
12453 /* 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
12454 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
12455 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
12456 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
12457
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12458 /* 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
12459 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
12460
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12461 /* 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
12462 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
12463 {
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12464 XEvent message;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
12465
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
12466 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
12467 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
12468 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
12469 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
12470 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
12471
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12472 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
12473 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
12474 False,
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12475 SubstructureRedirectMask | SubstructureNotifyMask,
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12476 &message))
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12477 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12478 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
12479 error ("Can't notify window manager of iconification");
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12480 }
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12481 }
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12482
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
12483 /* 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
12484 IconicState. */
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12485 x_wm_set_window_state (f, IconicState);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12486
4304
b5014da888a8 (x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents: 4277
diff changeset
12487 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
12488 {
b5014da888a8 (x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents: 4277
diff changeset
12489 /* 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
12490 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
12491 }
b5014da888a8 (x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents: 4277
diff changeset
12492
1658
452ba03935d7 * xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents: 1530
diff changeset
12493 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
12494 f->async_visible = 0;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12495
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12496 XFlush (FRAME_X_DISPLAY (f));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12497 UNBLOCK_INPUT;
5740
48da4ed089e9 (x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents: 5737
diff changeset
12498 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12499 }
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12500
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
12501
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12502 /* Free X resources of frame F. */
1810
bf618128d973 * xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents: 1803
diff changeset
12503
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12504 void
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12505 x_free_frame_resources (f)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12506 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12507 {
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12508 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
12509
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12510 BLOCK_INPUT;
1810
bf618128d973 * xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents: 1803
diff changeset
12511
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
12512 /* 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
12513 commands to the X server. */
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12514 if (dpyinfo->display)
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12515 {
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12516 if (f->output_data.x->icon_desc)
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
12517 XDestroyWindow (FRAME_X_DISPLAY (f), f->output_data.x->icon_desc);
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12518
14830
34db919835d3 (x_destroy_window) [HAVE_X_I18N]: Free xic and xim of frame.
Richard M. Stallman <rms@gnu.org>
parents: 14826
diff changeset
12519 #ifdef HAVE_X_I18N
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12520 if (FRAME_XIC (f))
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12521 free_frame_xic (f);
14830
34db919835d3 (x_destroy_window) [HAVE_X_I18N]: Free xic and xim of frame.
Richard M. Stallman <rms@gnu.org>
parents: 14826
diff changeset
12522 #endif
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12523
34210
2fe560117122 (x_destroy_window): Reset the frame's X window after
Gerd Moellmann <gerd@gnu.org>
parents: 34189
diff changeset
12524 if (FRAME_X_WINDOW (f))
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12525 XDestroyWindow (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f));
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12526
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12527 #ifdef USE_X_TOOLKIT
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12528 if (f->output_data.x->widget)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12529 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
12530 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
12531 #endif /* USE_X_TOOLKIT */
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12532
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
12533 unload_color (f, f->output_data.x->foreground_pixel);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
12534 unload_color (f, f->output_data.x->background_pixel);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
12535 unload_color (f, f->output_data.x->cursor_pixel);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
12536 unload_color (f, f->output_data.x->cursor_foreground_pixel);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
12537 unload_color (f, f->output_data.x->border_pixel);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
12538 unload_color (f, f->output_data.x->mouse_pixel);
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12539
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
12540 if (f->output_data.x->scroll_bar_background_pixel != -1)
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
12541 unload_color (f, f->output_data.x->scroll_bar_background_pixel);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
12542 if (f->output_data.x->scroll_bar_foreground_pixel != -1)
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
12543 unload_color (f, f->output_data.x->scroll_bar_foreground_pixel);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
12544 if (f->output_data.x->white_relief.allocated_p)
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
12545 unload_color (f, f->output_data.x->white_relief.pixel);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
12546 if (f->output_data.x->black_relief.allocated_p)
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
12547 unload_color (f, f->output_data.x->black_relief.pixel);
34318
d302f6935ff8 (x_destroy_window): Call x_free_gcs so that
Gerd Moellmann <gerd@gnu.org>
parents: 34250
diff changeset
12548
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12549 if (FRAME_FACE_CACHE (f))
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12550 free_frame_faces (f);
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12551
34318
d302f6935ff8 (x_destroy_window): Call x_free_gcs so that
Gerd Moellmann <gerd@gnu.org>
parents: 34250
diff changeset
12552 x_free_gcs (f);
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
12553 XFlush (FRAME_X_DISPLAY (f));
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
12554 }
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12555
17575
3f073536c09a Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17574
diff changeset
12556 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
12557 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
12558
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
12559 xfree (f->output_data.x);
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12560 f->output_data.x = NULL;
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12561
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
12562 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
12563 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
12564 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
12565 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
12566 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
12567 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
12568
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12569 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
12570 {
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12571 dpyinfo->mouse_face_beg_row
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12572 = dpyinfo->mouse_face_beg_col = -1;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12573 dpyinfo->mouse_face_end_row
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12574 = dpyinfo->mouse_face_end_col = -1;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12575 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
12576 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
12577 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
12578 }
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
12579
1810
bf618128d973 * xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents: 1803
diff changeset
12580 UNBLOCK_INPUT;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12581 }
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12582
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12583
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12584 /* Destroy the X window of frame F. */
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12585
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12586 void
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12587 x_destroy_window (f)
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12588 struct frame *f;
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12589 {
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12590 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12591
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12592 /* If a display connection is dead, don't try sending more
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12593 commands to the X server. */
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12594 if (dpyinfo->display != 0)
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12595 x_free_frame_resources (f);
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12596
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12597 dpyinfo->reference_count--;
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12598 }
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12599
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12600
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
12601 /* Setting window manager hints. */
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
12602
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12603 /* 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
12604 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
12605 that the window now has.
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12606 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
12607 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
12608
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12609 void
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12610 x_wm_set_size_hint (f, flags, user_position)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12611 struct frame *f;
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12612 long flags;
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12613 int user_position;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12614 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12615 XSizeHints size_hints;
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12616
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12617 #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
12618 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
12619 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
12620 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
12621 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
12622 #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
12623 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
12624 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12625
7187
ca0102511d80 (x_wm_set_size_hint): Don't set PMaxSize.
Richard M. Stallman <rms@gnu.org>
parents: 7169
diff changeset
12626 /* 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
12627 size_hints.flags = PResizeInc | PMinSize /* | PMaxSize */;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12628
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
12629 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
12630 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
12631
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
12632 #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
12633 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
12634 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
12635 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
12636 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
12637 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
12638 #else /* not USE_X_TOOLKIT */
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12639 size_hints.height = PIXEL_HEIGHT (f);
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12640 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
12641 #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
12642
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
12643 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
12644 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
12645 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
12646 = 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
12647 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
12648 = 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
12649
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12650 /* Calculate the base and minimum sizes.
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12651
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12652 (When we use the X toolkit, we don't do it here.
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12653 Instead we copy the values that the widgets are using, below.) */
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12654 #ifndef USE_X_TOOLKIT
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
12655 {
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
12656 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
12657 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
12658
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
12659 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
12660 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
12661
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
12662 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
12663
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
12664 /* 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
12665 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
12666 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
12667 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
12668 zero-row, zero-column frame.
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
12669
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
12670 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
12671 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
12672 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
12673
cd3d59155bf7 * xterm.c (x_wm_set_size_hint): Set the base_width and base_height
Jim Blandy <jimb@redhat.com>
parents: 1077
diff changeset
12674 #ifdef HAVE_X11R4
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
12675 size_hints.flags |= PBaseSize;
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
12676 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
12677 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
12678 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
12679 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
12680 #else
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
12681 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
12682 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
12683 #endif
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
12684 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12685
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12686 /* 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
12687 if (flags)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12688 {
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12689 size_hints.flags |= flags;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12690 goto no_read;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12691 }
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12692 #endif /* not USE_X_TOOLKIT */
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12693
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12694 {
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12695 XSizeHints hints; /* Sometimes I hate X Windows... */
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12696 long supplied_return;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12697 int value;
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12698
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12699 #ifdef HAVE_X11R4
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12700 value = XGetWMNormalHints (FRAME_X_DISPLAY (f), window, &hints,
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12701 &supplied_return);
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12702 #else
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12703 value = XGetNormalHints (FRAME_X_DISPLAY (f), window, &hints);
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12704 #endif
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12705
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12706 #ifdef USE_X_TOOLKIT
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12707 size_hints.base_height = hints.base_height;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12708 size_hints.base_width = hints.base_width;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12709 size_hints.min_height = hints.min_height;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12710 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
12711 #endif
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
12712
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12713 if (flags)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12714 size_hints.flags |= flags;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12715 else
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12716 {
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12717 if (value == 0)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12718 hints.flags = 0;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12719 if (hints.flags & PSize)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12720 size_hints.flags |= PSize;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12721 if (hints.flags & PPosition)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12722 size_hints.flags |= PPosition;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12723 if (hints.flags & USPosition)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12724 size_hints.flags |= USPosition;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12725 if (hints.flags & USSize)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12726 size_hints.flags |= USSize;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12727 }
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12728 }
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12729
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12730 #ifndef USE_X_TOOLKIT
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12731 no_read:
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12732 #endif
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
12733
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12734 #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
12735 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
12736 size_hints.flags |= PWinGravity;
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12737
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12738 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
12739 {
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12740 size_hints.flags &= ~ PPosition;
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12741 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
12742 }
4777
21ed9c9bb210 (w_wn_set_size_hint): Make recent window gravity addition
Brian Fox <bfox@gnu.org>
parents: 4696
diff changeset
12743 #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
12744
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
12745 #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
12746 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
12747 #else
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12748 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
12749 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12750 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12751
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12752 /* Used for IconicState or NormalState */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12753
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12754 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12755 x_wm_set_window_state (f, state)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12756 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12757 int state;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12758 {
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12759 #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
12760 Arg al[1];
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
12761
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
12762 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
12763 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
12764 #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
12765 Window window = FRAME_X_WINDOW (f);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12766
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
12767 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
12768 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
12769
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
12770 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
12771 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12772 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12773
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12774 void
9542
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
12775 x_wm_set_icon_pixmap (f, pixmap_id)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12776 struct frame *f;
9542
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
12777 int pixmap_id;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12778 {
15117
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
12779 Pixmap icon_pixmap;
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
12780
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12781 #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
12782 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
12783 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12784
9542
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
12785 if (pixmap_id > 0)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
12786 {
15117
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
12787 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
12788 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
12789 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
12790 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
12791 {
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
12792 /* 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
12793 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
12794 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
12795 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
12796 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
12797 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
12798 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
12799 #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
12800 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
12801 #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
12802 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
12803 #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
12804 }
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
12805
15117
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
12806 #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
12807
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
12808 {
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
12809 Arg al[1];
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
12810 XtSetArg (al[0], XtNiconPixmap, icon_pixmap);
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
12811 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
12812 }
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
12813
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
12814 #else /* not USE_X_TOOLKIT */
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
12815
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
12816 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
12817 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
12818
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
12819 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12820 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12821
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12822 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12823 x_wm_set_icon_position (f, icon_x, icon_y)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12824 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12825 int icon_x, icon_y;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12826 {
7806
ef7a60d59543 (x_wm_set_icon_position, x_wm_set_icon_pixmap):
Richard M. Stallman <rms@gnu.org>
parents: 7801
diff changeset
12827 #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
12828 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
12829 #else
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
12830 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
12831 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12832
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
12833 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
12834 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
12835 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
12836
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
12837 XSetWMHints (FRAME_X_DISPLAY (f), window, &f->output_data.x->wm_hints);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12838 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12839
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12840
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12841 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12842 Fonts
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12843 ***********************************************************************/
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12844
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12845 /* 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
12846
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12847 struct font_info *
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12848 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
12849 FRAME_PTR f;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12850 int font_idx;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12851 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12852 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
12853 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12854
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12855
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12856 /* Return a list of names of available fonts matching PATTERN on frame F.
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12857
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12858 If SIZE is > 0, it is the size (maximum bounds width) of fonts
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12859 to be listed.
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12860
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12861 SIZE < 0 means include scalable fonts.
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12862
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12863 Frame F null means we have not yet created any frame on X, and
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12864 consult the first display in x_display_list. MAXNAMES sets a limit
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12865 on how many fonts to match. */
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12866
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12867 Lisp_Object
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12868 x_list_fonts (f, pattern, size, maxnames)
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12869 struct frame *f;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12870 Lisp_Object pattern;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12871 int size;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12872 int maxnames;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12873 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12874 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
12875 Lisp_Object tem, second_best;
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12876 struct x_display_info *dpyinfo
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12877 = f ? FRAME_X_DISPLAY_INFO (f) : x_display_list;
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12878 Display *dpy = dpyinfo->display;
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12879 int try_XLoadQueryFont = 0;
24633
c7d905dca6ba (x_list_fonts): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 24618
diff changeset
12880 int count;
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12881 int allow_scalable_fonts_p = 0;
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12882
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12883 if (size < 0)
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12884 {
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12885 allow_scalable_fonts_p = 1;
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12886 size = 0;
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12887 }
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12888
19447
34099ec680df (x_list_fonts): Adjusted for the name change of
Kenichi Handa <handa@m17n.org>
parents: 19276
diff changeset
12889 patterns = Fassoc (pattern, Valternate_fontname_alist);
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12890 if (NILP (patterns))
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12891 patterns = Fcons (pattern, Qnil);
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12892
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12893 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
12894 /* 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
12895 try_XLoadQueryFont = 1;
19062
9cc02044117d (x_list_fonts): Request at least 10 fonts by XListFonts.
Kenichi Handa <handa@m17n.org>
parents: 19060
diff changeset
12896
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
12897 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
12898 {
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12899 int num_fonts;
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
12900 char **names = NULL;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12901
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
12902 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
12903 /* 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
12904 The cache is an alist of the form:
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12905 ((((PATTERN . MAXNAMES) . SCALABLE) (FONTNAME . WIDTH) ...) ...) */
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12906 tem = XCDR (dpyinfo->name_list_element);
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12907 key = Fcons (Fcons (pattern, make_number (maxnames)),
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12908 allow_scalable_fonts_p ? Qt : Qnil);
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12909 list = Fassoc (key, tem);
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12910 if (!NILP (list))
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12911 {
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12912 list = Fcdr_safe (list);
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12913 /* 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
12914 goto label_cached;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12915 }
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12916
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12917 /* 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
12918
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12919 BLOCK_INPUT;
24618
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12920 count = x_catch_errors (dpy);
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12921
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12922 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
12923 {
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12924 XFontStruct *font;
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12925 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
12926
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12927 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
12928 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
12929 {
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12930 /* 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
12931 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
12932 font = NULL;
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12933 x_clear_errors (dpy);
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12934 }
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12935
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12936 if (font
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12937 && 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
12938 {
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12939 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
12940 int len = strlen (name);
22530
6d2e22a16952 (x_list_fonts): Keep alloca usage simple.
Karl Heuer <kwzh@gnu.org>
parents: 22522
diff changeset
12941 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
12942
23095
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
12943 /* 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
12944 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
12945 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
12946 if (len == 0)
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
12947 try_XLoadQueryFont = 0;
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
12948 else
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
12949 {
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
12950 num_fonts = 1;
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
12951 names = (char **) alloca (sizeof (char *));
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
12952 /* 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
12953 simple var. */
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
12954 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
12955 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
12956 XFree (name);
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
12957 }
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12958 }
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12959 else
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12960 try_XLoadQueryFont = 0;
22943
5493321d4526 (x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 22907
diff changeset
12961
5493321d4526 (x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 22907
diff changeset
12962 if (font)
5493321d4526 (x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 22907
diff changeset
12963 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
12964 }
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12965
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12966 if (!try_XLoadQueryFont)
24618
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12967 {
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12968 /* 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
12969 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
12970 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
12971 &num_fonts);
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12972 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
12973 {
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12974 /* 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
12975 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
12976 names = NULL;
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12977 x_clear_errors (dpy);
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12978 }
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12979 }
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12980
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12981 x_uncatch_errors (dpy, count);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12982 UNBLOCK_INPUT;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12983
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12984 if (names)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12985 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12986 int i;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12987
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12988 /* 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
12989 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
12990 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
12991 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12992 int width = 0;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12993 char *p = names[i];
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12994 int average_width = -1, dashes = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12995
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12996 /* Count the number of dashes in NAMES[I]. If there are
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12997 14 dashes, and the field value following 12th dash
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12998 (AVERAGE_WIDTH) is 0, this is a auto-scaled font which
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
12999 is usually too ugly to be used for editing. Let's
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13000 ignore it. */
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13001 while (*p)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13002 if (*p++ == '-')
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13003 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13004 dashes++;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13005 if (dashes == 7) /* PIXEL_SIZE field */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13006 width = atoi (p);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13007 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
13008 average_width = atoi (p);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13009 }
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13010
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13011 if (allow_scalable_fonts_p
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13012 || dashes < 14 || average_width != 0)
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13013 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13014 tem = build_string (names[i]);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13015 if (NILP (Fassoc (tem, list)))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13016 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13017 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
13018 && ((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
13019 (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
13020 >= 0))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13021 /* 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
13022 width of this font. */
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13023 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
13024 else
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13025 /* 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
13026 list = Fcons (Fcons (tem, Qnil), list);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13027 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13028 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13029 }
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
13030 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
13031 XFreeFontNames (names);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13032 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13033
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13034 /* Now store the result in the cache. */
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13035 XCDR (dpyinfo->name_list_element)
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13036 = Fcons (Fcons (key, list), XCDR (dpyinfo->name_list_element));
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13037
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13038 label_cached:
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13039 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
13040
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13041 newlist = second_best = Qnil;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13042 /* 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
13043 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
13044 {
19060
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
13045 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
13046
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13047 tem = XCAR (list);
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13048
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13049 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
13050 continue;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13051 if (!size)
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13052 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13053 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
13054 continue;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13055 }
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13056
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13057 if (!INTEGERP (XCDR (tem)))
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13058 {
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13059 /* Since we have not yet known the size of this font, we
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13060 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
13061 XFontStruct *thisinfo;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13062
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13063 BLOCK_INPUT;
24618
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
13064 count = x_catch_errors (dpy);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13065 thisinfo = XLoadQueryFont (dpy,
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13066 XSTRING (XCAR (tem))->data);
24618
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
13067 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
13068 {
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
13069 /* 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
13070 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
13071 thisinfo = NULL;
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
13072 x_clear_errors (dpy);
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
13073 }
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
13074 x_uncatch_errors (dpy, count);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13075 UNBLOCK_INPUT;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13076
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13077 if (thisinfo)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13078 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13079 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
13080 = (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
13081 ? 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
13082 : 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
13083 XFreeFont (dpy, thisinfo);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13084 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13085 else
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13086 /* 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
13087 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
13088 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
13089 XCDR (tem) = make_number (0);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13090 }
19060
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
13091
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13092 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
13093 if (found_size == size)
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13094 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
13095 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
13096 {
19060
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
13097 if (NILP (second_best))
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13098 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
13099 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
13100 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13101 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
13102 || 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
13103 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
13104 }
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
13105 else
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
13106 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13107 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
13108 && 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
13109 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
13110 }
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13111 }
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13112 }
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13113 if (!NILP (newlist))
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13114 break;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13115 else if (!NILP (second_best))
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13116 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13117 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
13118 break;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13119 }
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13120 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13121
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13122 return newlist;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13123 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13124
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13125
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13126 #if GLYPH_DEBUG
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13127
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13128 /* 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
13129 font table. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13130
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13131 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13132 x_check_font (f, font)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13133 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13134 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13135 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13136 int i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13137 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
13138
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13139 xassert (font != NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13140
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13141 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
13142 if (dpyinfo->font_table[i].name
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13143 && font == dpyinfo->font_table[i].font)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13144 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13145
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13146 xassert (i < dpyinfo->n_fonts);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13147 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13148
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13149 #endif /* GLYPH_DEBUG != 0 */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13150
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13151 /* 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
13152 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
13153 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
13154 "-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
13155 have font->min_bounds.width == 0. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13156
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13157 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13158 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
13159 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13160 int *w, *h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13161 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13162 *h = FONT_HEIGHT (font);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13163 *w = font->min_bounds.width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13164
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13165 /* 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
13166 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
13167 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
13168 if (*w <= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13169 *w = font->max_bounds.width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13170 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13171
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13172
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13173 /* 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
13174 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
13175 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
13176 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
13177 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
13178
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13179 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13180 x_compute_min_glyph_bounds (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13181 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13182 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13183 int i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13184 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
13185 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13186 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
13187 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
13188
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13189 dpyinfo->smallest_font_height = 100000;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13190 dpyinfo->smallest_char_width = 100000;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13191
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13192 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
13193 if (dpyinfo->font_table[i].name)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13194 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13195 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
13196 int w, h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13197
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13198 font = (XFontStruct *) fontp->font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13199 xassert (font != (XFontStruct *) ~0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13200 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
13201
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13202 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
13203 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
13204 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13205
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13206 xassert (dpyinfo->smallest_char_width > 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13207 && dpyinfo->smallest_font_height > 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13208
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13209 return (dpyinfo->n_fonts == 1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13210 || dpyinfo->smallest_char_width < old_width
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13211 || dpyinfo->smallest_font_height < old_height);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13212 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13213
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13214
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13215 /* 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
13216 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
13217 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
13218 If loading is failed, return NULL. */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13219
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13220 struct font_info *
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13221 x_load_font (f, fontname, size)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13222 struct frame *f;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13223 register char *fontname;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13224 int size;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13225 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13226 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
13227 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
13228 int count;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13229
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13230 /* 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
13231 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
13232 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
13233 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
13234
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13235 if (!NILP (font_names))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13236 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13237 Lisp_Object tail;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13238 int i;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13239
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13240 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
13241 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
13242 if (dpyinfo->font_table[i].name
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13243 && (!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
13244 XSTRING (XCAR (tail))->data)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13245 || !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
13246 XSTRING (XCAR (tail))->data)))
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13247 return (dpyinfo->font_table + i);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13248 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13249
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13250 /* 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
13251 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13252 char *full_name;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13253 XFontStruct *font;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13254 struct font_info *fontp;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13255 unsigned long value;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13256 int i;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13257
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13258 /* 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
13259 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
13260 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
13261 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
13262 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
13263 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
13264 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
13265
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13266 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
13267 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
13268 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
13269 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
13270 {
d4ee4399e999 (x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24224
diff changeset
13271 /* 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
13272 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
13273 font = NULL;
d4ee4399e999 (x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24224
diff changeset
13274 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
13275 }
d4ee4399e999 (x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24224
diff changeset
13276 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
13277 UNBLOCK_INPUT;
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13278 if (!font)
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13279 return NULL;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13280
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13281 /* 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
13282 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
13283 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
13284 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13285
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13286 /* 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
13287 if (i == dpyinfo->n_fonts
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13288 && 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
13289 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13290 int sz;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13291 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
13292 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
13293 dpyinfo->font_table
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13294 = (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
13295 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13296
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13297 fontp = dpyinfo->font_table + i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13298 if (i == dpyinfo->n_fonts)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13299 ++dpyinfo->n_fonts;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13300
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13301 /* 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
13302 BLOCK_INPUT;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13303 fontp->font = font;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13304 fontp->font_idx = i;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13305 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
13306 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
13307
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13308 /* 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
13309 full_name = 0;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13310 if (XGetFontProperty (font, XA_FONT, &value))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13311 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13312 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
13313 char *p = name;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13314 int dashes = 0;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13315
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13316 /* 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
13317 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
13318 so don't use it.
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13319 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
13320 stored in them. */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13321 while (*p)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13322 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13323 if (*p == '-')
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13324 dashes++;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13325 p++;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13326 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13327
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13328 if (dashes >= 13)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13329 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13330 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
13331 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
13332 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13333
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13334 XFree (name);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13335 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13336
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13337 if (full_name != 0)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13338 fontp->full_name = full_name;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13339 else
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13340 fontp->full_name = fontp->name;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13341
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13342 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
13343 fontp->height = FONT_HEIGHT (font);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13344
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13345 if (NILP (font_names))
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13346 {
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13347 /* 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
13348 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
13349 the cache for x_list_fonts. */
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13350 Lisp_Object lispy_name = build_string (fontname);
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13351 Lisp_Object lispy_full_name = build_string (fontp->full_name);
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13352 Lisp_Object key = Fcons (Fcons (lispy_name, make_number (256)),
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13353 Qnil);
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13354
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13355 XCDR (dpyinfo->name_list_element)
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13356 = Fcons (Fcons (key,
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13357 Fcons (Fcons (lispy_full_name,
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13358 make_number (fontp->size)),
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13359 Qnil)),
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13360 XCDR (dpyinfo->name_list_element));
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13361 if (full_name)
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13362 {
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13363 key = Fcons (Fcons (lispy_full_name, make_number (256)),
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13364 Qnil);
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13365 XCDR (dpyinfo->name_list_element)
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13366 = Fcons (Fcons (key,
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13367 Fcons (Fcons (lispy_full_name,
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13368 make_number (fontp->size)),
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13369 Qnil)),
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13370 XCDR (dpyinfo->name_list_element));
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13371 }
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13372 }
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13373
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13374 /* 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
13375 code-points (0x20..0x7F or 0x2020..0x7F7F) of each charset to
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
13376 the font code-points (0:0x20..0x7F, 1:0xA0..0xFF), or
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
13377 (0:0x2020..0x7F7F, 1:0xA0A0..0xFFFF, 3:0x20A0..0x7FFF,
18057
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
13378 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
13379 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
13380 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
13381 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
13382 fontp->encoding[1]
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13383 = (font->max_byte1 == 0
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13384 /* 1-byte font */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13385 ? (font->min_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13386 ? (font->max_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13387 ? 0 /* 0x20..0x7F */
18057
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
13388 : 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
13389 : 1) /* 0xA0..0xFF */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13390 /* 2-byte font */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13391 : (font->min_byte1 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13392 ? (font->max_byte1 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13393 ? (font->min_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13394 ? (font->max_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13395 ? 0 /* 0x2020..0x7F7F */
18057
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
13396 : 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
13397 : 3) /* 0x20A0..0x7FFF */
18057
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
13398 : 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
13399 : (font->min_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13400 ? (font->max_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13401 ? 2 /* 0xA020..0xFF7F */
18057
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
13402 : 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
13403 : 1))); /* 0xA0A0..0xFFFF */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13404
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13405 fontp->baseline_offset
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13406 = (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
13407 ? (long) value : 0);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13408 fontp->relative_compose
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13409 = (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
13410 ? (long) value : 0);
17103
7cde34a6424e (dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents: 17050
diff changeset
13411 fontp->default_ascent
7cde34a6424e (dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents: 17050
diff changeset
13412 = (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
13413 ? (long) value : 0);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13414
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13415 /* 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
13416 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
13417 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
13418 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
13419 glyph matrix reallocation necessary. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13420 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
13421 UNBLOCK_INPUT;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13422 return fontp;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13423 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13424 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13425
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13426
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13427 /* 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
13428 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
13429
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13430 struct font_info *
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13431 x_query_font (f, fontname)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13432 struct frame *f;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13433 register char *fontname;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13434 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13435 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
13436 int i;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13437
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13438 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
13439 if (dpyinfo->font_table[i].name
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13440 && (!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
13441 || !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
13442 return (dpyinfo->font_table + i);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13443 return NULL;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13444 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13445
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13446
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13447 /* 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
13448 `encoder' of the structure. */
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
13449
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
13450 void
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
13451 x_find_ccl_program (fontp)
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
13452 struct font_info *fontp;
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
13453 {
25068
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
13454 Lisp_Object list, elt;
21548
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
13455
31694
97c48afc4c5a (x_draw_image_glyph_string): Remove a comment describing
Gerd Moellmann <gerd@gnu.org>
parents: 31614
diff changeset
13456 elt = Qnil;
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13457 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
13458 {
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13459 elt = XCAR (list);
21548
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
13460 if (CONSP (elt)
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13461 && STRINGP (XCAR (elt))
32640
9adbb2160f48 (x_find_ccl_program): Check also fontp->full_name.
Kenichi Handa <handa@m17n.org>
parents: 32607
diff changeset
13462 && ((fast_c_string_match_ignore_case (XCAR (elt), fontp->name)
9adbb2160f48 (x_find_ccl_program): Check also fontp->full_name.
Kenichi Handa <handa@m17n.org>
parents: 32607
diff changeset
13463 >= 0)
9adbb2160f48 (x_find_ccl_program): Check also fontp->full_name.
Kenichi Handa <handa@m17n.org>
parents: 32607
diff changeset
13464 || (fast_c_string_match_ignore_case (XCAR (elt), fontp->full_name)
9adbb2160f48 (x_find_ccl_program): Check also fontp->full_name.
Kenichi Handa <handa@m17n.org>
parents: 32607
diff changeset
13465 >= 0)))
25068
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
13466 break;
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
13467 }
31694
97c48afc4c5a (x_draw_image_glyph_string): Remove a comment describing
Gerd Moellmann <gerd@gnu.org>
parents: 31614
diff changeset
13468
25068
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
13469 if (! NILP (list))
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
13470 {
25085
23813e3a69b8 (x_find_ccl_program): Add casting.
Kenichi Handa <handa@m17n.org>
parents: 25083
diff changeset
13471 struct ccl_program *ccl
23813e3a69b8 (x_find_ccl_program): Add casting.
Kenichi Handa <handa@m17n.org>
parents: 25083
diff changeset
13472 = (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
13473
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13474 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
13475 xfree (ccl);
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
13476 else
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
13477 fontp->font_encoder = ccl;
21548
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
13478 }
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
13479 }
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
13480
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13481
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13482
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13483 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13484 Initialization
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13485 ***********************************************************************/
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
13486
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13487 #ifdef USE_X_TOOLKIT
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13488 static XrmOptionDescRec emacs_options[] = {
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13489 {"-geometry", ".geometry", XrmoptionSepArg, NULL},
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13490 {"-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
13491
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13492 {"-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
13493 XrmoptionSepArg, NULL},
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13494 {"-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
13495
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13496 {"-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
13497 {"-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
13498 {"-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
13499 {"-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
13500 {"-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
13501 {"-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
13502 {"-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
13503 };
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13504 #endif /* USE_X_TOOLKIT */
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13505
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13506 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
13507
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13508 #ifdef MULTI_KBOARD
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13509 /* Test whether two display-name strings agree up to the dot that separates
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13510 the screen number from the server number. */
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13511 static int
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13512 same_x_server (name1, name2)
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13513 char *name1, *name2;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13514 {
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13515 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
13516 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
13517 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
13518 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
13519
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13520 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
13521 && 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
13522 length_until_period++;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13523
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13524 /* 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
13525 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
13526 name1 += 4;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13527 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
13528 name2 += 4;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13529 /* 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
13530 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
13531 && name1[system_name_length] == ':')
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13532 name1 += system_name_length;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13533 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
13534 && name2[system_name_length] == ':')
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13535 name2 += system_name_length;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13536 /* 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
13537 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
13538 && name1[length_until_period] == ':')
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13539 name1 += length_until_period;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13540 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
13541 && name2[length_until_period] == ':')
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13542 name2 += length_until_period;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13543
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13544 for (; *name1 != '\0' && *name1 == *name2; name1++, name2++)
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13545 {
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13546 if (*name1 == ':')
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13547 seen_colon++;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13548 if (seen_colon && *name1 == '.')
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13549 return 1;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13550 }
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13551 return (seen_colon
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13552 && (*name1 == '.' || *name1 == '\0')
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13553 && (*name2 == '.' || *name2 == '\0'));
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13554 }
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13555 #endif
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13556
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
13557 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
13558 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
13559 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
13560 char *xrm_option;
10e818a0248a (x_term_init): New args xrm_option and resource_string.
Richard M. Stallman <rms@gnu.org>
parents: 7738
diff changeset
13561 char *resource_name;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13562 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
13563 int connection;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13564 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
13565 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
13566 XrmDatabase xrdb;
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
13567
11997
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
13568 BLOCK_INPUT;
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
13569
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13570 if (!x_initialized)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13571 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13572 x_initialize ();
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13573 x_initialized = 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13574 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13575
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13576 #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
13577 /* 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
13578 errors with X11R5:
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
13579 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
13580 on protocol request 18skiloaf.
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
13581 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
13582 #ifdef HAVE_X11XTR6
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
13583 XtSetLanguageProc (NULL, NULL, NULL);
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
13584 #endif
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
13585
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13586 {
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13587 int argc = 0;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13588 char *argv[3];
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13589
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13590 argv[0] = "";
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13591 argc = 1;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13592 if (xrm_option)
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13593 {
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13594 argv[argc++] = "-xrm";
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13595 argv[argc++] = xrm_option;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13596 }
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13597 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
13598 resource_name, EMACS_CLASS,
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13599 emacs_options, XtNumber (emacs_options),
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13600 &argc, argv);
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
13601
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
13602 #ifdef HAVE_X11XTR6
14963
6ac4f300f9b4 Include locale.h if HAVE_SETLOCALE.
Richard M. Stallman <rms@gnu.org>
parents: 14946
diff changeset
13603 /* 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
13604 fixup_locale ();
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
13605 #endif
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13606 }
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13607
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13608 #else /* not USE_X_TOOLKIT */
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
13609 #ifdef HAVE_X11R5
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
13610 XSetLocaleModifiers ("");
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
13611 #endif
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13612 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
13613 #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
13614
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13615 /* Detect failure. */
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13616 if (dpy == 0)
11997
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
13617 {
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
13618 UNBLOCK_INPUT;
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
13619 return 0;
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
13620 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13621
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13622 /* 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
13623
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13624 dpyinfo = (struct x_display_info *) xmalloc (sizeof (struct x_display_info));
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
13625 bzero (dpyinfo, sizeof *dpyinfo);
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13626
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13627 #ifdef MULTI_KBOARD
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13628 {
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13629 struct x_display_info *share;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13630 Lisp_Object tail;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13631
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13632 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
13633 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
13634 if (same_x_server (XSTRING (XCAR (XCAR (tail)))->data,
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13635 XSTRING (display_name)->data))
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13636 break;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13637 if (share)
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13638 dpyinfo->kboard = share->kboard;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13639 else
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13640 {
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13641 dpyinfo->kboard = (KBOARD *) xmalloc (sizeof (KBOARD));
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13642 init_kboard (dpyinfo->kboard);
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
13643 if (!EQ (XSYMBOL (Qvendor_specific_keysyms)->function, Qunbound))
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
13644 {
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
13645 char *vendor = ServerVendor (dpy);
28307
1d4a11a5f39d (x_term_init): Unblock input around call1.
Gerd Moellmann <gerd@gnu.org>
parents: 28281
diff changeset
13646 UNBLOCK_INPUT;
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
13647 dpyinfo->kboard->Vsystem_key_alist
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
13648 = call1 (Qvendor_specific_keysyms,
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
13649 build_string (vendor ? vendor : ""));
28307
1d4a11a5f39d (x_term_init): Unblock input around call1.
Gerd Moellmann <gerd@gnu.org>
parents: 28281
diff changeset
13650 BLOCK_INPUT;
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
13651 }
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
13652
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13653 dpyinfo->kboard->next_kboard = all_kboards;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13654 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
13655 /* 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
13656 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
13657 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
13658 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
13659 current_kboard = dpyinfo->kboard;
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13660 }
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13661 dpyinfo->kboard->reference_count++;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13662 }
10652
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
13663 #endif
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
13664
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13665 /* 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
13666 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
13667 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
13668
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13669 /* 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
13670 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
13671 x_display_name_list);
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13672 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
13673
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13674 dpyinfo->display = dpy;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13675
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13676 #if 0
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13677 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
13678 #endif /* ! 0 */
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13679
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13680 dpyinfo->x_id_name
21244
50929073a0ba Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 21017
diff changeset
13681 = (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
13682 + 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
13683 + 2);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13684 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
13685 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
13686
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
13687 /* 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
13688 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
13689
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
13690 /* 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
13691 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
13692 = 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
13693
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
13694 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
13695 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
13696 #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
13697 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
13698 #else
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
13699 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
13700 #endif
11162
95b70c82ec51 (x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents: 11122
diff changeset
13701 /* 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
13702 all versions. */
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13703 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
13704
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
13705 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
13706 DefaultScreen (dpyinfo->display));
27991
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13707 select_visual (dpyinfo);
27985
4ba445af210b (x_term_init): Set Colormap member of x_display_info
Gerd Moellmann <gerd@gnu.org>
parents: 27974
diff changeset
13708 dpyinfo->cmap = DefaultColormapOfScreen (dpyinfo->screen);
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
13709 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
13710 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
13711 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
13712 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
13713 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
13714 dpyinfo->icon_bitmap_id = -1;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13715 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
13716 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
13717 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
13718 dpyinfo->bitmaps = 0;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13719 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
13720 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
13721 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
13722 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
13723 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
13724 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
13725 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
13726 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
13727 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
13728 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
13729 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
13730 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
13731 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
13732 dpyinfo->x_highlight_frame = 0;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13733 dpyinfo->image_cache = make_image_cache ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13734
27985
4ba445af210b (x_term_init): Set Colormap member of x_display_info
Gerd Moellmann <gerd@gnu.org>
parents: 27974
diff changeset
13735 /* See if a private colormap is requested. */
27991
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13736 if (dpyinfo->visual == DefaultVisualOfScreen (dpyinfo->screen))
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13737 {
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13738 if (dpyinfo->visual->class == PseudoColor)
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13739 {
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13740 Lisp_Object value;
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13741 value = display_x_get_resource (dpyinfo,
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13742 build_string ("privateColormap"),
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13743 build_string ("PrivateColormap"),
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13744 Qnil, Qnil);
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13745 if (STRINGP (value)
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13746 && (!strcmp (XSTRING (value)->data, "true")
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13747 || !strcmp (XSTRING (value)->data, "on")))
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13748 dpyinfo->cmap = XCopyColormapAndFree (dpyinfo->display, dpyinfo->cmap);
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13749 }
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13750 }
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13751 else
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13752 dpyinfo->cmap = XCreateColormap (dpyinfo->display, dpyinfo->root_window,
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13753 dpyinfo->visual, AllocNone);
27985
4ba445af210b (x_term_init): Set Colormap member of x_display_info
Gerd Moellmann <gerd@gnu.org>
parents: 27974
diff changeset
13754
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13755 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13756 int screen_number = XScreenNumberOfScreen (dpyinfo->screen);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13757 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
13758 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
13759 dpyinfo->resy = pixels * 25.4 / mm;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13760 pixels = DisplayWidth (dpyinfo->display, screen_number);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13761 mm = DisplayWidthMM (dpyinfo->display, screen_number);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13762 dpyinfo->resx = pixels * 25.4 / mm;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13763 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13764
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
13765 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
13766 = 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
13767 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
13768 = 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
13769 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
13770 = 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
13771 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
13772 = 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
13773 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
13774 = 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
13775 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
13776 = 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
13777 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
13778 = 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
13779 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
13780 = 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
13781 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
13782 = 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
13783 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
13784 = 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
13785 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
13786 = XInternAtom (dpyinfo->display, "TEXT", False);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13787 dpyinfo->Xatom_COMPOUND_TEXT
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13788 = 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
13789 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
13790 = 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
13791 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
13792 = 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
13793 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
13794 = 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
13795 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
13796 = 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
13797 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
13798 = 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
13799 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
13800 = 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
13801 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
13802 = 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
13803 /* For properties of font. */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13804 dpyinfo->Xatom_PIXEL_SIZE
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13805 = XInternAtom (dpyinfo->display, "PIXEL_SIZE", False);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13806 dpyinfo->Xatom_MULE_BASELINE_OFFSET
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13807 = 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
13808 dpyinfo->Xatom_MULE_RELATIVE_COMPOSE
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13809 = 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
13810 dpyinfo->Xatom_MULE_DEFAULT_ASCENT
7cde34a6424e (dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents: 17050
diff changeset
13811 = 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
13812
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13813 /* Ghostscript support. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13814 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
13815 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
13816
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13817 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
13818 False);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13819
11162
95b70c82ec51 (x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents: 11122
diff changeset
13820 dpyinfo->cut_buffers_initialized = 0;
95b70c82ec51 (x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents: 11122
diff changeset
13821
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
13822 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
13823 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
13824
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13825 {
18705
c4f2eab8e736 (x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents: 18646
diff changeset
13826 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
13827
c4f2eab8e736 (x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents: 18646
diff changeset
13828 null_bits[0] = 0x00;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13829
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13830 dpyinfo->null_pixel
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13831 = XCreatePixmapFromBitmapData (dpyinfo->display, dpyinfo->root_window,
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13832 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
13833 1);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13834 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13835
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13836 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13837 extern int gray_bitmap_width, gray_bitmap_height;
34511
1f69c833e2af (x_term_init): Declare gray_bitmap_bits as `extern
Gerd Moellmann <gerd@gnu.org>
parents: 34449
diff changeset
13838 extern char *gray_bitmap_bits;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13839 dpyinfo->gray
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13840 = XCreatePixmapFromBitmapData (dpyinfo->display, dpyinfo->root_window,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13841 gray_bitmap_bits,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13842 gray_bitmap_width, gray_bitmap_height,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13843 (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
13844 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13845
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
13846 #ifdef HAVE_X_I18N
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
13847 xim_initialize (dpyinfo, resource_name);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
13848 #endif
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
13849
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9565
diff changeset
13850 #ifdef subprocesses
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9565
diff changeset
13851 /* 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
13852 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
13853 add_keyboard_wait_descriptor (connection);
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9565
diff changeset
13854 #endif
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
13855
4147
c6657758fb6f * xterm.c (x_term_init): Adjust message printed when we can't
Jim Blandy <jimb@redhat.com>
parents: 3951
diff changeset
13856 #ifndef F_SETOWN_BUG
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13857 #ifdef F_SETOWN
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13858 #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
13859 /* 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
13860 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
13861 #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
13862 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
13863 #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
13864 #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
13865 #endif /* F_SETOWN_BUG */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13866
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13867 #ifdef SIGIO
11994
b4dd8ca308dd (x_term_init): Call init_sigio only if interrupt_input.
Karl Heuer <kwzh@gnu.org>
parents: 11988
diff changeset
13868 if (interrupt_input)
b4dd8ca308dd (x_term_init): Call init_sigio only if interrupt_input.
Karl Heuer <kwzh@gnu.org>
parents: 11988
diff changeset
13869 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
13870 #endif /* ! defined (SIGIO) */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13871
15904
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
13872 #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
13873 #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
13874 /* 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
13875 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
13876 {
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
13877 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
13878 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
13879 Font font;
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
13880 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
13881
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
13882 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
13883 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
13884 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
13885 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
13886 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
13887 to.addr = (XPointer)&font;
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
13888 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
13889 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
13890 abort ();
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
13891 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
13892 XrmPutLineResource (&xrdb, "Emacs.dialog.*.font: 9x15");
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
13893 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
13894 }
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
13895 #endif
19021
6f150e46a5fd (x_term_init) [! HAVE_X11R5]: Don't try to use XtCvtStringToFont.
Richard M. Stallman <rms@gnu.org>
parents: 18996
diff changeset
13896 #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
13897
28139
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
13898 /* See if we should run in synchronous mode. This is useful
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
13899 for debugging X code. */
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
13900 {
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
13901 Lisp_Object value;
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
13902 value = display_x_get_resource (dpyinfo,
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
13903 build_string ("synchronous"),
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
13904 build_string ("Synchronous"),
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
13905 Qnil, Qnil);
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
13906 if (STRINGP (value)
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
13907 && (!strcmp (XSTRING (value)->data, "true")
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
13908 || !strcmp (XSTRING (value)->data, "on")))
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
13909 XSynchronize (dpyinfo->display, True);
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
13910 }
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
13911
11997
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
13912 UNBLOCK_INPUT;
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
13913
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13914 return dpyinfo;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13915 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13916
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13917 /* 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
13918 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
13919
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13920 void
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13921 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
13922 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
13923 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13924 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
13925
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13926 /* 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
13927 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
13928 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
13929 && 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
13930 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
13931 else
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13932 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13933 Lisp_Object tail;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13934
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13935 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
13936 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
13937 {
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
13938 if (EQ (XCAR (XCDR (tail)), dpyinfo->name_list_element))
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13939 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13940 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
13941 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13942 }
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13943 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
13944 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13945 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13946
27524
67501e6e8b34 (x_delete_display): Update next_noop_dpyinfo to ensure
Gerd Moellmann <gerd@gnu.org>
parents: 27500
diff changeset
13947 if (next_noop_dpyinfo == dpyinfo)
67501e6e8b34 (x_delete_display): Update next_noop_dpyinfo to ensure
Gerd Moellmann <gerd@gnu.org>
parents: 27500
diff changeset
13948 next_noop_dpyinfo = dpyinfo->next;
67501e6e8b34 (x_delete_display): Update next_noop_dpyinfo to ensure
Gerd Moellmann <gerd@gnu.org>
parents: 27500
diff changeset
13949
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13950 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
13951 x_display_list = dpyinfo->next;
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13952 else
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13953 {
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13954 struct x_display_info *tail;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13955
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13956 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
13957 if (tail->next == dpyinfo)
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13958 tail->next = tail->next->next;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13959 }
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13960
12771
6f07c79d9a05 (x_delete_display) [AIX]: Don't call XRmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 12750
diff changeset
13961 #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
13962 #ifndef AIX /* On AIX, XCloseDisplay calls this. */
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13963 XrmDestroyDatabase (dpyinfo->xrdb);
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13964 #endif
12771
6f07c79d9a05 (x_delete_display) [AIX]: Don't call XRmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 12750
diff changeset
13965 #endif
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13966 #ifdef MULTI_KBOARD
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13967 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
13968 delete_kboard (dpyinfo->kboard);
10652
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
13969 #endif
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
13970 #ifdef HAVE_X_I18N
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
13971 if (dpyinfo->xim)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
13972 xim_close_dpy (dpyinfo);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
13973 #endif
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
13974
10652
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
13975 xfree (dpyinfo->font_table);
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
13976 xfree (dpyinfo->x_id_name);
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
13977 xfree (dpyinfo->color_cells);
10652
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
13978 xfree (dpyinfo);
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13979 }
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
13980
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13981
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13982 /* 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
13983
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13984 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
13985 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13986 x_produce_glyphs,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13987 x_write_glyphs,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13988 x_insert_glyphs,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13989 x_clear_end_of_line,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13990 x_scroll_run,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13991 x_after_update_window_line,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13992 x_update_window_begin,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13993 x_update_window_end,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13994 XTcursor_to,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13995 x_flush,
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
13996 x_clear_mouse_face,
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
13997 x_get_glyph_overhangs,
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
13998 x_fix_overlapping_area
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13999 };
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14000
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
14001 void
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14002 x_initialize ()
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14003 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14004 rif = &x_redisplay_interface;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14005
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14006 clear_frame_hook = x_clear_frame;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14007 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
14008 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
14009 delete_glyphs_hook = x_delete_glyphs;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14010 ring_bell_hook = XTring_bell;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14011 reset_terminal_modes_hook = XTreset_terminal_modes;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14012 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
14013 update_begin_hook = x_update_begin;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14014 update_end_hook = x_update_end;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14015 set_terminal_window_hook = XTset_terminal_window;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14016 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
14017 frame_up_to_date_hook = XTframe_up_to_date;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14018 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
14019 mouse_position_hook = XTmouse_position;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
14020 frame_rehighlight_hook = XTframe_rehighlight;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
14021 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
14022 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
14023 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
14024 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
14025 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
14026 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
14027
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
14028 scroll_region_ok = 1; /* we'll scroll partial frames */
35393
2470cdee5ed8 (x_initialize): Set char_ins_del_ok to 1.
Gerd Moellmann <gerd@gnu.org>
parents: 35367
diff changeset
14029 char_ins_del_ok = 1;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14030 line_ins_del_ok = 1; /* we'll just blt 'em */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14031 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
14032 memory_below_frame = 0; /* we don't remember what scrolls
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14033 off the bottom */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14034 baud_rate = 19200;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14035
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14036 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
14037 last_tool_bar_item = -1;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14038 any_help_event_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14039
4476
e7de1b007447 (x_term_init): Set the hooks before we call Fset_input_mode.
Richard M. Stallman <rms@gnu.org>
parents: 4304
diff changeset
14040 /* 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
14041 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
14042
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
14043 #ifdef USE_X_TOOLKIT
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
14044 XtToolkitInitialize ();
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
14045 Xt_app_con = XtCreateApplicationContext ();
12494
bfbe2490dbf0 (x_initialize) [USE_X_TOOLKIT]: Set fallback resources.
Richard M. Stallman <rms@gnu.org>
parents: 12431
diff changeset
14046 XtAppSetFallbackResources (Xt_app_con, Xt_default_resources);
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
14047
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
14048 /* Install an asynchronous timer that processes Xt timeout events
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
14049 every 0.1s. This is necessary because some widget sets use
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
14050 timeouts internally, for example the LessTif menu bar, or the
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
14051 Xaw3d scroll bar. When Xt timouts aren't processed, these
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
14052 widgets don't behave normally. */
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
14053 {
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
14054 EMACS_TIME interval;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
14055 EMACS_SET_SECS_USECS (interval, 0, 100000);
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
14056 start_atimer (ATIMER_CONTINUOUS, interval, x_process_timeouts, 0);
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
14057 }
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
14058 #endif
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
14059
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
14060 #ifdef USE_TOOLKIT_SCROLL_BARS
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
14061 xaw3d_arrow_scroll = False;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
14062 xaw3d_pick_top = True;
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
14063 #endif
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
14064
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
14065 /* 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
14066 original error handler. */
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
14067 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
14068 XSetIOErrorHandler (x_io_error_quitter);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14069
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14070 /* Disable Window Change signals; they are handled by X events. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14071 #ifdef SIGWINCH
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14072 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
14073 #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
14074
10743
6977bff3ff38 (x_display_bar_cursor): Use frame's cursor_width.
Richard M. Stallman <rms@gnu.org>
parents: 10652
diff changeset
14075 signal (SIGPIPE, x_connection_signal);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14076 }
395
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
14077
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14078
395
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
14079 void
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
14080 syms_of_xterm ()
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
14081 {
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
14082 staticpro (&x_error_message_string);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
14083 x_error_message_string = Qnil;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
14084
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14085 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
14086 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
14087
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
14088 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
14089 last_mouse_scroll_bar = Qnil;
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
14090
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
14091 staticpro (&Qvendor_specific_keysyms);
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
14092 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
14093
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
14094 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
14095 last_mouse_press_frame = Qnil;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14096
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
14097 help_echo = Qnil;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14098 staticpro (&help_echo);
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
14099 help_echo_object = Qnil;
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
14100 staticpro (&help_echo_object);
30302
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
14101 help_echo_window = Qnil;
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
14102 staticpro (&help_echo_window);
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
14103 previous_help_echo = Qnil;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14104 staticpro (&previous_help_echo);
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
14105 help_echo_pos = -1;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14106
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14107 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
14108 "*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
14109 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
14110 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
14111 x_stretch_cursor_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14112
34869
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
14113 DEFVAR_LISP ("x-toolkit-scroll-bars", &Vx_toolkit_scroll_bars,
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
14114 "What X toolkit scroll bars Emacs uses.\n\
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
14115 A value of nil means Emacs doesn't use X toolkit scroll bars.\n\
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
14116 Otherwise, value is a symbol describing the X toolkit.");
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
14117 #ifdef USE_TOOLKIT_SCROLL_BARS
34869
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
14118 #ifdef USE_MOTIF
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
14119 Vx_toolkit_scroll_bars = intern ("motif");
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
14120 #elif defined HAVE_XAW3D
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
14121 Vx_toolkit_scroll_bars = intern ("xaw3d");
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14122 #else
34869
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
14123 Vx_toolkit_scroll_bars = intern ("xaw");
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
14124 #endif
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
14125 #else
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
14126 Vx_toolkit_scroll_bars = Qnil;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14127 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14128
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14129 staticpro (&last_mouse_motion_frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14130 last_mouse_motion_frame = Qnil;
395
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
14131 }
14694
41de9b2640a1 (X_CONNECTION_LOCK_FLAG): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 14692
diff changeset
14132
41de9b2640a1 (X_CONNECTION_LOCK_FLAG): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 14692
diff changeset
14133 #endif /* not HAVE_X_WINDOWS */