annotate src/xterm.c @ 37627:4364ececf7ab

Remove log entries for 20.5 .. 20.7.
author Gerd Moellmann <gerd@gnu.org>
date Wed, 09 May 2001 09:50:49 +0000
parents 21ed9ad15f92
children 456320a3ebab
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>
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
120 #else /* !USE_MOTIF i.e. use Xaw */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
121
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
122 #ifdef HAVE_XAW3D
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
123 #include <X11/Xaw3d/Simple.h>
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
124 #include <X11/Xaw3d/Scrollbar.h>
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
125 #define ARROW_SCROLLBAR
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
126 #include <X11/Xaw3d/ScrollbarP.h>
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
127 #else /* !HAVE_XAW3D */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
128 #include <X11/Xaw/Simple.h>
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
129 #include <X11/Xaw/Scrollbar.h>
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
130 #endif /* !HAVE_XAW3D */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
131 #ifndef XtNpickTop
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
132 #define XtNpickTop "pickTop"
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
133 #endif /* !XtNpickTop */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
134 #endif /* !USE_MOTIF */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
135 #endif /* USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
136
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
137 #endif /* USE_X_TOOLKIT */
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
138
6022
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
139 #ifndef USE_X_TOOLKIT
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
140 #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
141 #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
142 #endif
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
143
7602
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
144 #ifdef USE_X_TOOLKIT
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
145 #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
146 #ifndef XtNinitialState
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
147 #define XtNinitialState "initialState"
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
148 #endif
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
14522
9cee3e7c6468 (min, max): Don't define if already defined.
Richard M. Stallman <rms@gnu.org>
parents: 14489
diff changeset
151 #ifndef min
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
152 #define min(a,b) ((a) < (b) ? (a) : (b))
14522
9cee3e7c6468 (min, max): Don't define if already defined.
Richard M. Stallman <rms@gnu.org>
parents: 14489
diff changeset
153 #endif
9cee3e7c6468 (min, max): Don't define if already defined.
Richard M. Stallman <rms@gnu.org>
parents: 14489
diff changeset
154 #ifndef max
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
155 #define max(a,b) ((a) > (b) ? (a) : (b))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
156 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
157
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
158 #define abs(x) ((x) < 0 ? -(x) : (x))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
159
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
160 #define BETWEEN(X, LOWER, UPPER) ((X) >= (LOWER) && (X) < (UPPER))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
161
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
162
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
163 /* Bitmaps for truncated lines. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
164
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
165 enum bitmap_type
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
166 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
167 NO_BITMAP,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
168 LEFT_TRUNCATION_BITMAP,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
169 RIGHT_TRUNCATION_BITMAP,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
170 OVERLAY_ARROW_BITMAP,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
171 CONTINUED_LINE_BITMAP,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
172 CONTINUATION_LINE_BITMAP,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
173 ZV_LINE_BITMAP
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
174 };
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
175
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
176 /* Bitmap drawn to indicate lines not displaying text if
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
177 `indicate-empty-lines' is non-nil. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
178
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
179 #define zv_width 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
180 #define zv_height 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
181 static unsigned char zv_bits[] = {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
182 0x00, 0x00, 0x1e, 0x1e, 0x1e, 0x1e, 0x00, 0x00};
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
183
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
184 /* An arrow like this: `<-'. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
185
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
186 #define left_width 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
187 #define left_height 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
188 static unsigned char left_bits[] = {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
189 0x18, 0x0c, 0x06, 0x3f, 0x3f, 0x06, 0x0c, 0x18};
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
190
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
191 /* Right truncation arrow bitmap `->'. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
192
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
193 #define right_width 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
194 #define right_height 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
195 static unsigned char right_bits[] = {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
196 0x18, 0x30, 0x60, 0xfc, 0xfc, 0x60, 0x30, 0x18};
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
197
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
198 /* Marker for continued lines. */
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
199
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
200 #define continued_width 8
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
201 #define continued_height 8
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
202 static unsigned char continued_bits[] = {
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
203 0x3c, 0x7c, 0xc0, 0xe4, 0xfc, 0x7c, 0x3c, 0x7c};
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
204
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
205 /* Marker for continuation lines. */
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
206
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
207 #define continuation_width 8
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
208 #define continuation_height 8
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
209 static unsigned char continuation_bits[] = {
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
210 0x3c, 0x3e, 0x03, 0x27, 0x3f, 0x3e, 0x3c, 0x3e};
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
211
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
212 /* Overlay arrow bitmap. */
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
213
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
214 #if 0
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
215 /* A bomb. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
216 #define ov_width 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
217 #define ov_height 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
218 static unsigned char ov_bits[] = {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
219 0x30, 0x08, 0x3c, 0x7e, 0x7a, 0x7a, 0x62, 0x3c};
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
220 #else
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
221 /* A triangular arrow. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
222 #define ov_width 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
223 #define ov_height 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
224 static unsigned char ov_bits[] = {
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
225 0x03, 0x0f, 0x1f, 0x3f, 0x3f, 0x1f, 0x0f, 0x03};
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
226
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
227 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
228
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
229 extern Lisp_Object Qhelp_echo;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
230
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
231
34869
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
232 /* 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
233
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
234 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
235
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
236 /* If a string, XTread_socket generates an event to display that string.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
237 (The display is done in read_char.) */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
238
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
239 static Lisp_Object help_echo;
30302
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
240 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
241 static Lisp_Object help_echo_object;
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
242 static int help_echo_pos;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
243
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
244 /* Temporary variable for XTread_socket. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
245
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
246 static Lisp_Object previous_help_echo;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
247
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
248 /* 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
249 start. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
250
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
251 static int any_help_event_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
252
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
253 /* Non-zero means 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
254 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
255 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
256
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
257 int x_stretch_cursor_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
258
37153
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
259 /* Non-zero means make use of UNDERLINE_POSITION font properties. */
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
260
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
261 int x_use_underline_position_properties;
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
262
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
263 /* 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
264 use. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
265
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
266 struct x_display_info *x_display_list;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
267
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
268 /* 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
269 . 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
270 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
271 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
272
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
273 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
274
2474
86c8a6e08fd4 Fix typo in comment delimiter.
Richard M. Stallman <rms@gnu.org>
parents: 2468
diff changeset
275 /* 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
276 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
277 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
278 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
279
2468
35aa32e1a003 * xterm.c (updating_frame): Declare this extern instead of static,
Jim Blandy <jimb@redhat.com>
parents: 2439
diff changeset
280 extern struct frame *updating_frame;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
281
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
282 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
283
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
284 /* 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
285
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
286 struct frame *pending_autoraise_frame;
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
287
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
288 #ifdef USE_X_TOOLKIT
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
289 /* The application context for Xt use. */
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
290 XtAppContext Xt_app_con;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
291 static String Xt_default_resources[] = {0};
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
292 #endif /* USE_X_TOOLKIT */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
293
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
294 /* 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
295 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
296 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
297
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
298 struct cursor_pos output_cursor;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
299
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
300 /* 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
301
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
302 static int toolkit_scroll_bar_interaction;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
303
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
304 /* Mouse movement.
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
305
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
306 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
307 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
308 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
309 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
310
c99dd01d9334 (note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 14963
diff changeset
311 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
312
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
313 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
314 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
315 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
316 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
317 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
318 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
319 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
320 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
321 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
322 is off. */
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
323
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
324 /* 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
325
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
326 FRAME_PTR last_mouse_frame;
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
327 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
328 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
329
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
330 /* 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
331
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
332 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
333 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
334 an ordinary motion.
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
335
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
336 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
337 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
338 event. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
339
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
340 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
341
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
342 /* 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
343 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
344 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
345 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
346 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
347 it's somewhat accurate. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
348
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
349 static Time last_mouse_movement_time;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
350
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
351 /* 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
352 events. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
353
9337
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
354 #ifdef __STDC__
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
355 static int volatile input_signal_count;
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
356 #else
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
357 static int input_signal_count;
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
358 #endif
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
359
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
360 /* Used locally within XTread_socket. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
361
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
362 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
363
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
364 /* 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
365
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
366 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
367 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
368
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
369 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
370
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
371 /* Tells if a window manager is present or not. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
372
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
373 extern Lisp_Object Vx_no_window_manager;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
374
6941
a914781ef58a (Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents: 6934
diff changeset
375 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
376
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
377 extern int errno;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
378
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
379 /* 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
380
1841
338e4ffdb54b (XTread_socket): Support extra_keyboard_modifiers.
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
381 extern int extra_keyboard_modifiers;
338e4ffdb54b (XTread_socket): Support extra_keyboard_modifiers.
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
382
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
383 static Lisp_Object Qvendor_specific_keysyms;
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
384
30321
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
385 extern XrmDatabase x_load_resources P_ ((Display *, char *, char *, char *));
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
386 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
387
24991
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 /* 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
390 glyphs in x_draw_glyphs. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
391
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
392 enum draw_glyphs_face
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
393 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
394 DRAW_NORMAL_TEXT,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
395 DRAW_INVERSE_VIDEO,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
396 DRAW_CURSOR,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
397 DRAW_MOUSE_FACE,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
398 DRAW_IMAGE_RAISED,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
399 DRAW_IMAGE_SUNKEN
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
400 };
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
401
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
402 static int x_alloc_nearest_color_1 P_ ((Display *, Colormap, XColor *));
35487
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
403 static void x_set_window_size_1 P_ ((struct frame *, int, int, int));
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
404 static const XColor *x_color_cells P_ ((Display *, int *));
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
405 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
406 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
407 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
408 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
409 unsigned));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
410 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
411 int *, int *));
36670
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
412 static int fast_find_string_pos P_ ((struct window *, int, Lisp_Object,
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
413 int *, int *, int *, int *, int));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
414 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
415 static struct glyph *x_y_to_hpos_vpos P_ ((struct window *, int, int,
36670
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
416 int *, int *, int *, int));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
417 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
418 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
419 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
420 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
421 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
422 enum draw_glyphs_face));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
423 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
424 int x_catch_errors P_ ((Display *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
425 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
426 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
427 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
428 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
429 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
430 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
431 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
432 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
433 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
434 void x_initialize P_ ((void));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
435 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
436 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
437 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
438 struct glyph_row *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
439 enum draw_glyphs_face));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
440 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
441 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
442 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
443 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
444 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
445 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
446 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
447 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
448 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
449 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
450 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
451 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
452 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
453 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
454 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
455 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
456 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
457 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
458 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
459 XRectangle *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
460 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
461 static void expose_window_tree P_ ((struct window *, XRectangle *));
37540
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
462 static int expose_window P_ ((struct window *, XRectangle *));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
463 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
464 XRectangle *, enum glyph_row_area));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
465 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
466 XRectangle *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
467 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
468 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
469 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
470 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
471 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
472 enum bitmap_type));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
473
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
474 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
475 GC, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
476 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
477 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
478 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
479 static void x_flush P_ ((struct frame *f));
30321
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
480 static void x_update_begin P_ ((struct frame *));
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
481 static void x_update_window_begin P_ ((struct window *));
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
482 static void x_draw_vertical_border P_ ((struct window *));
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
483 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
484 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
485 static void x_produce_stretch_glyph P_ ((struct it *));
36492
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
486 static struct scroll_bar *x_window_to_scroll_bar P_ ((Window));
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
487 static void x_scroll_bar_report_motion P_ ((struct frame **, Lisp_Object *,
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
488 enum scroll_bar_part *,
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
489 Lisp_Object *, Lisp_Object *,
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
490 unsigned long *));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
491
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
492 /* 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
493
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
494 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
495 x_flush (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
496 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
497 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
498 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
499 if (f == NULL)
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 Lisp_Object rest, frame;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
502 FOR_EACH_FRAME (rest, frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
503 x_flush (XFRAME (frame));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
504 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
505 else if (FRAME_X_P (f))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
506 XFlush (FRAME_X_DISPLAY (f));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
507 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
508 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
509
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
510
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
511 /* 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
512 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
513 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
514 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
515 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
516 performance. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
517
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
518 #define XFlush(DISPLAY) (void) 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
519
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
520
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
521 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
522 Debugging
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
523 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
524
12192
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
525 #if 0
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
526
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
527 /* 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
528 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
529
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
530 struct record
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
531 {
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
532 char *locus;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
533 int type;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
534 };
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
535
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
536 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
537
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
538 int event_record_index;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
539
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
540 record_event (locus, type)
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
541 char *locus;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
542 int type;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
543 {
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
544 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
545 event_record_index = 0;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
546
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
547 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
548 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
549 event_record_index++;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
550 }
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
551
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
552 #endif /* 0 */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
553
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
554
12192
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
555
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
556 /* 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
557
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
558 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
559 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
560 Display *dpy;
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
561 {
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
562 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
563
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
564 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
565 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
566 return dpyinfo;
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
567
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
568 return 0;
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
569 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
570
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
571
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
572
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
573 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
574 Starting and ending an update
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
575 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
576
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
577 /* 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
578 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
579 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
580 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
581 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
582
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
583 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
584 x_update_begin (f)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
585 struct frame *f;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
586 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
587 /* Nothing to do. */
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
590
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
591 /* 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
592 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
593 position of W. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
594
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
595 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
596 x_update_window_begin (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
597 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
598 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
599 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
600 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
601
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
602 updated_window = w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
603 set_output_cursor (&w->cursor);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
604
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
605 BLOCK_INPUT;
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
606
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
607 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
608 {
6660
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
609 /* 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
610 display_info->mouse_face_defer = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
611
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
612 /* 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
613 highlighting. */
10274
83aaf59dabbe (XTupdate_begin): Fix backward test in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 10223
diff changeset
614 if (FRAME_GARBAGED_P (f))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
615 display_info->mouse_face_window = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
616
30153
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
617 #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
618 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
619 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
620 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
621 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
622 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
623
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
624 /* 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
625 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
626 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
627 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
628 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
629 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
630 && 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
631 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
632 int i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
633
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
634 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
635 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
636 break;
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
637
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
638 if (i < w->desired_matrix->nrows)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
639 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
640 }
30153
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
641 #endif /* 0 */
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
642 }
8781
98741404d3e0 Delete X11 conditionals.
Richard M. Stallman <rms@gnu.org>
parents: 8724
diff changeset
643
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
644 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
645 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
646
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
647
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
648 /* 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
649 have vertical scroll bars. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
650
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
651 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
652 x_draw_vertical_border (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
653 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
654 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
655 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
656
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
657 /* 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
658 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
659 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
660 neighbor will suffice as a border. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
661 if (!WINDOW_RIGHTMOST_P (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
662 && !FRAME_HAS_VERTICAL_SCROLL_BARS (f))
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 int x0, x1, y0, y1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
665
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
666 window_box_edges (w, -1, &x0, &y0, &x1, &y1);
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
667 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
668 y1 -= 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
669
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
670 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
671 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
672 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
673 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
674
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
675
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
676 /* 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
677
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
678 Draw vertical borders between horizontally adjacent windows, and
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
679 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
680
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
681 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
682 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
683 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
684
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
685 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
686 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
687 here. */
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
688
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
689 static void
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
690 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
691 struct window *w;
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
692 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
693 {
36929
9d0ed4b0c89a (x_update_window_end): Handle overwritten mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 36880
diff changeset
694 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (XFRAME (w->frame));
9d0ed4b0c89a (x_update_window_end): Handle overwritten mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 36880
diff changeset
695
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
696 if (!w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
697 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
698 BLOCK_INPUT;
30160
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
36929
9d0ed4b0c89a (x_update_window_end): Handle overwritten mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 36880
diff changeset
709 /* If a row with mouse-face was overwritten, arrange for
9d0ed4b0c89a (x_update_window_end): Handle overwritten mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 36880
diff changeset
710 XTframe_up_to_date to redisplay the mouse highlight. */
9d0ed4b0c89a (x_update_window_end): Handle overwritten mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 36880
diff changeset
711 if (mouse_face_overwritten_p)
9d0ed4b0c89a (x_update_window_end): Handle overwritten mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 36880
diff changeset
712 {
9d0ed4b0c89a (x_update_window_end): Handle overwritten mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 36880
diff changeset
713 dpyinfo->mouse_face_beg_row = dpyinfo->mouse_face_beg_col = -1;
9d0ed4b0c89a (x_update_window_end): Handle overwritten mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 36880
diff changeset
714 dpyinfo->mouse_face_end_row = dpyinfo->mouse_face_end_col = -1;
9d0ed4b0c89a (x_update_window_end): Handle overwritten mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 36880
diff changeset
715 dpyinfo->mouse_face_window = Qnil;
9d0ed4b0c89a (x_update_window_end): Handle overwritten mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 36880
diff changeset
716 }
9d0ed4b0c89a (x_update_window_end): Handle overwritten mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 36880
diff changeset
717
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
718 updated_window = NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
719 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
720
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
721
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
722 /* 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
723 update_end. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
724
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
725 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
726 x_update_end (f)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
727 struct frame *f;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
728 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
729 /* Mouse highlight may be displayed again. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
730 FRAME_X_DISPLAY_INFO (f)->mouse_face_defer = 0;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
731
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
732 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
733 XFlush (FRAME_X_DISPLAY (f));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
734 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
735 }
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
736
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
737
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
738 /* 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
739 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
740 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
741
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
742 static void
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
743 XTframe_up_to_date (f)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
744 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
745 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
746 if (FRAME_X_P (f))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
747 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
748 struct 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
749
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
750 if (dpyinfo->mouse_face_deferred_gc
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
751 || f == dpyinfo->mouse_face_mouse_frame)
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 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
754 if (dpyinfo->mouse_face_mouse_frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
755 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
756 dpyinfo->mouse_face_mouse_x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
757 dpyinfo->mouse_face_mouse_y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
758 dpyinfo->mouse_face_deferred_gc = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
759 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
760 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
761 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
762 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
763
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
764
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
765 /* 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
766 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
767 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
768 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
769 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
770 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
771
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
772 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
773 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
774 struct glyph_row *desired_row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
775 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
776 struct window *w = updated_window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
777
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
778 xassert (w);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
779
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
780 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
781 {
35581
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
782 struct frame *f;
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
783 int width;
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
784
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
785 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
786 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
787
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
788 /* 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
789 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
790 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
791 && (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
792 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
793 width != 0))
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
794 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
795 int height = desired_row->visible_height;
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
796 int x = (window_box_right (w, -1)
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
797 + 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
798 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
799
35581
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
800 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
801 x, y, width, height, False);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
802 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
803
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
804 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
805 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
806 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
807
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
808
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
809 /* 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
810 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
811 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
812 drawn. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
813
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
814 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
815 x_draw_bitmap (w, row, which)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
816 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
817 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
818 enum bitmap_type which;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
819 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
820 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
821 Display *display = FRAME_X_DISPLAY (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
822 Window window = FRAME_X_WINDOW (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
823 int x, y, wd, h, dy;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
824 unsigned char *bits;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
825 Pixmap pixmap;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
826 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
827 struct face *face;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
828 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
829
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
830 /* 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
831 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
832
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
833 switch (which)
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 LEFT_TRUNCATION_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 = left_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 OVERLAY_ARROW_BITMAP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
845 wd = left_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
846 h = left_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
847 bits = ov_bits;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
848 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
849 - wd
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
850 - (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
851 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
852
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
853 case RIGHT_TRUNCATION_BITMAP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
854 wd = right_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
855 h = right_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
856 bits = right_bits;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
857 x = window_box_right (w, -1);
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
858 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
859 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
860
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
861 case CONTINUED_LINE_BITMAP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
862 wd = right_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
863 h = right_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
864 bits = continued_bits;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
865 x = window_box_right (w, -1);
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
866 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
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 CONTINUATION_LINE_BITMAP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
870 wd = continuation_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
871 h = continuation_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
872 bits = continuation_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 case ZV_LINE_BITMAP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
879 wd = zv_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
880 h = zv_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
881 bits = zv_bits;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
882 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
883 - wd
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
884 - (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
885 break;
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 default:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
888 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
889 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
890
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
891 /* 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
892 start drawing the bitmap. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
893 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
894 dy = (row->height - h) / 2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
895
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
896 /* 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
897 by the server. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
898 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
899 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
900 face->foreground,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
901 face->background, depth);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
902 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
903 XFreePixmap (display, pixmap);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
904 XSetClipMask (display, gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
905 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
906
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
907
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
908 /* 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
909 function with input blocked. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
910
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
911 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
912 x_draw_row_bitmaps (w, row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
913 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
914 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
915 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
916 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
917 enum bitmap_type bitmap;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
918 struct face *face;
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
919 int header_line_height = -1;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
920
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
921 xassert (interrupt_input_blocked);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
922
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
923 /* 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
924 don't have to draw anything. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
925 if (row->visible_height <= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
926 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
927
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
928 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
929 PREPARE_FACE_FOR_DISPLAY (f, face);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
930
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
931 /* 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
932 if (row->overlay_arrow_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
933 bitmap = OVERLAY_ARROW_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
934 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
935 bitmap = LEFT_TRUNCATION_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
936 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
937 bitmap = CONTINUATION_LINE_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
938 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
939 bitmap = ZV_LINE_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
940 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
941 bitmap = NO_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
942
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
943 /* Clear flags area if no bitmap to draw or if bitmap doesn't fill
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
944 the flags area. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
945 if (bitmap == NO_BITMAP
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
946 || 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
947 || row->height > FRAME_FLAGS_BITMAP_HEIGHT (f))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
948 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
949 /* 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
950 int border = ((XFASTINT (w->left) > 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
951 && !FRAME_HAS_VERTICAL_SCROLL_BARS (f))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
952 ? 1 : 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
953 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
954
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
955 if (header_line_height < 0)
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
956 header_line_height = WINDOW_DISPLAY_HEADER_LINE_HEIGHT (w);
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
957
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
958 /* In case the same realized face is used for bitmap areas and
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
959 for something displayed in the text (e.g. face `region' on
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
960 mono-displays, the fill style may have been changed to
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
961 FillSolid in x_draw_glyph_string_background. */
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
962 if (face->stipple)
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
963 XSetFillStyle (FRAME_X_DISPLAY (f), face->gc, FillOpaqueStippled);
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
964 else
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
965 XSetForeground (FRAME_X_DISPLAY (f), face->gc, face->background);
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
966
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
967 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
968 face->gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
969 (left
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
970 - 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
971 + border),
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
972 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
973 row->y)),
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
974 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
975 row->visible_height);
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
976 if (!face->stipple)
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
977 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
978 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
979
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
980 /* Draw the left bitmap. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
981 if (bitmap != NO_BITMAP)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
982 x_draw_bitmap (w, row, bitmap);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
983
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
984 /* 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
985 if (row->truncated_on_right_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
986 bitmap = RIGHT_TRUNCATION_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
987 else if (row->continued_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
988 bitmap = CONTINUED_LINE_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
989 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
990 bitmap = NO_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
992 /* 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
993 the flags area. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
994 if (bitmap == NO_BITMAP
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
995 || 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
996 || 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
997 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
998 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
999
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
1000 if (header_line_height < 0)
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
1001 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
1002
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
1003 /* 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
1004 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
1005 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
1006 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
1007 if (face->stipple)
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
1008 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
1009 else
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->background);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1011 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
1012 face->gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1013 right,
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
1014 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
1015 row->y)),
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
1016 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
1017 row->visible_height);
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
1018 if (!face->stipple)
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
1019 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
1020 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1021
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1022 /* Draw the right bitmap. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1023 if (bitmap != NO_BITMAP)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1024 x_draw_bitmap (w, row, bitmap);
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
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1027
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1028 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1029 Line Highlighting
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1030 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1031
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1032 /* 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
1033 frames. Aborts when called. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1034
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1035 static void
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1036 XTreassert_line_highlight (new, vpos)
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1037 int new, vpos;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1038 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1039 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1040 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1041
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1042
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1043 /* 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
1044 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
1045 called. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1046
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1047 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1048 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
1049 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
1050 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1051 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1052 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1053
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1054
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1055 /* 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
1056 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
1057 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
1058 rarely happens). */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1059
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
1060 static void
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1061 XTset_terminal_modes ()
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1062 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1063 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1064
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1065 /* 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
1066 the X-windows go away, and suspending requires no action. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1067
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
1068 static void
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1069 XTreset_terminal_modes ()
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1070 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1071 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1072
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1073
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1074
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1075 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1076 Output Cursor
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1077 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1078
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1079 /* 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
1080 positions are relative to updated_window. */
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 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1083 set_output_cursor (cursor)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1084 struct cursor_pos *cursor;
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 output_cursor.hpos = cursor->hpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1087 output_cursor.vpos = cursor->vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1088 output_cursor.x = cursor->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1089 output_cursor.y = cursor->y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1090 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1091
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1092
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1093 /* Set a nominal cursor position.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1094
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1095 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
1096 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
1097
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1098 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
1099 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
1100 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
1101 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
1102
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1103 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1104 XTcursor_to (vpos, hpos, y, x)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1105 int vpos, hpos, y, x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1106 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1107 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1108
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1109 /* 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
1110 if (updated_window)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1111 w = updated_window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1112 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1113 w = XWINDOW (selected_window);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1114
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1115 /* Set the output cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1116 output_cursor.hpos = hpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1117 output_cursor.vpos = vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1118 output_cursor.x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1119 output_cursor.y = y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1120
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1121 /* 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
1122 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
1123 if (updated_window == NULL)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1124 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1125 BLOCK_INPUT;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1126 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
1127 XFlush (FRAME_X_DISPLAY (SELECTED_FRAME ()));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1128 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1129 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1130 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1131
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1132
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1133
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1134 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1135 Display Iterator
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1136 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1137
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1138 /* Function prototypes of this page. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1139
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1140 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
1141 struct glyph *,
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1142 XChar2b *,
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1143 int *));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1144 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
1145 int, XChar2b *, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1146 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
1147 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
1148 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
1149 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
1150 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
1151 int, int, double));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1152 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
1153 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
1154
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1155
27974
d443ad369a18 (PER_CHAR_METRIC): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27967
diff changeset
1156 /* 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
1157 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
1158
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1159 static INLINE XCharStruct *
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1160 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
1161 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1162 XChar2b *char2b;
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 /* The result metric information. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1165 XCharStruct *pcm = NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1166
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1167 xassert (font && char2b);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1168
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1169 if (font->per_char != NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1170 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1171 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
1172 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1173 /* 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
1174 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
1175 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
1176 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
1177 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
1178 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
1179 if (char2b->byte1 == 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1180 && char2b->byte2 >= font->min_char_or_byte2
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1181 && char2b->byte2 <= font->max_char_or_byte2)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1182 pcm = font->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
1183 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1184 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1185 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1186 /* If 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
1187 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
1188 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
1189 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
1190
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1191 byte1 = N/D + min_byte1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1192 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
1193
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1194 where:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1195
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1196 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
1197 / = integer division
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1198 \ = integer modulus */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1199 if (char2b->byte1 >= font->min_byte1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1200 && char2b->byte1 <= font->max_byte1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1201 && 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
1202 && 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
1203 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1204 pcm = (font->per_char
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1205 + ((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
1206 * (char2b->byte1 - font->min_byte1))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1207 + (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 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1209 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1210 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1211 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1212 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1213 /* 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
1214 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
1215 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
1216 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
1217 && 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
1218 pcm = &font->max_bounds;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1219 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1220
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1221 return ((pcm == NULL
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1222 || (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
1223 ? NULL : pcm);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1224 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1225
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 /* 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
1228 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
1229
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1230 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1231 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
1232 int c;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1233 XChar2b *char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1234 struct font_info *font_info;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1235 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1236 int charset = CHAR_CHARSET (c);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1237 XFontStruct *font = font_info->font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1238
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1239 /* 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
1240 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
1241 fixed encoding. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1242 if (font_info->font_encoder)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1243 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1244 /* It's a program. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1245 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
1246
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1247 if (CHARSET_DIMENSION (charset) == 1)
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 ccl->reg[0] = charset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1250 ccl->reg[1] = char2b->byte2;
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 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1253 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1254 ccl->reg[0] = charset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1255 ccl->reg[1] = char2b->byte1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1256 ccl->reg[2] = char2b->byte2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1257 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1258
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1259 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
1260
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1261 /* 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
1262 program. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1263 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
1264 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
1265 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1266 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
1267 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1268 else if (font_info->encoding[charset])
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1269 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1270 /* 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
1271 encoding numbers. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1272 int enc = font_info->encoding[charset];
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 if ((enc == 1 || enc == 2)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1275 && CHARSET_DIMENSION (charset) == 2)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1276 char2b->byte1 |= 0x80;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1277
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1278 if (enc == 1 || enc == 3)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1279 char2b->byte2 |= 0x80;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1280 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1281 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1282
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1283
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1284 /* 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
1285 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
1286 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
1287 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
1288
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1289 static INLINE struct face *
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1290 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
1291 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1292 int c, face_id;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1293 XChar2b *char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1294 int multibyte_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1295 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1296 struct 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
1297
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1298 if (!multibyte_p)
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 /* 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
1301 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
1302 char2b->byte1 = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1303 char2b->byte2 = c;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1304 face_id = FACE_FOR_CHAR (f, face, c);
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1305 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
1306 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1307 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
1308 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1309 /* 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
1310 char2b->byte1 = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1311 char2b->byte2 = c;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1312 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1313 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1314 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1315 int c1, c2, charset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1316
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1317 /* 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
1318 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
1319 SPLIT_CHAR (c, charset, c1, c2);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1320 if (c2 > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1321 char2b->byte1 = c1, char2b->byte2 = c2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1322 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1323 char2b->byte1 = 0, char2b->byte2 = c1;
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 /* Maybe encode the character in *CHAR2B. */
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1326 if (face->font != NULL)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1327 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1328 struct font_info *font_info
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1329 = 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
1330 if (font_info)
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1331 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
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1335 /* 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
1336 xassert (face != NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1337 PREPARE_FACE_FOR_DISPLAY (f, face);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1338
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1339 return face;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1340 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1341
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1342
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1343 /* 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
1344 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
1345 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
1346
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1347 static INLINE struct face *
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1348 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
1349 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1350 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1351 XChar2b *char2b;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1352 int *two_byte_p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1353 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1354 struct face *face;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1355
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1356 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
1357 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
1358
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1359 if (two_byte_p)
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1360 *two_byte_p = 0;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1361
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1362 if (!glyph->multibyte_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1363 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1364 /* 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
1365 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
1366 char2b->byte1 = 0;
27000
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
1367 char2b->byte2 = glyph->u.ch;
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
1368 }
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
1369 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
1370 && 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
1371 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1372 /* 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
1373 char2b->byte1 = 0;
27000
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
1374 char2b->byte2 = glyph->u.ch;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1375 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1376 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1377 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1378 int c1, c2, charset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1379
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1380 /* 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
1381 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
1382 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
1383 if (c2 > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1384 char2b->byte1 = c1, char2b->byte2 = c2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1385 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1386 char2b->byte1 = 0, char2b->byte2 = c1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1387
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1388 /* Maybe encode the character in *CHAR2B. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1389 if (charset != CHARSET_ASCII)
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 struct font_info *font_info
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1392 = 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
1393 if (font_info)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1394 {
27000
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
1395 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
1396 if (two_byte_p)
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1397 *two_byte_p
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1398 = ((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
1399 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1400 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1401 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1402
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1403 /* 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
1404 xassert (face != NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1405 PREPARE_FACE_FOR_DISPLAY (f, face);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1406 return face;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1409
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1410 /* 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
1411 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
1412
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1413 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1414 x_append_glyph (it)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1415 struct it *it;
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 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1418 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
1419
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1420 xassert (it->glyph_row);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1421 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
1422
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1423 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
1424 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
1425 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1426 glyph->charpos = CHARPOS (it->position);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1427 glyph->object = it->object;
30042
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1428 glyph->pixel_width = it->pixel_width;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1429 glyph->voffset = it->voffset;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1430 glyph->type = CHAR_GLYPH;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1431 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
1432 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
1433 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
1434 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
1435 || it->phys_descent > it->descent);
30042
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1436 glyph->padding_p = 0;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1437 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
1438 glyph->face_id = it->face_id;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1439 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
1440 ++it->glyph_row->used[area];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1441 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1442 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1443
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1444 /* 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
1445 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
1446
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1447 static INLINE void
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1448 x_append_composite_glyph (it)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1449 struct it *it;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1450 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1451 struct glyph *glyph;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1452 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
1453
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1454 xassert (it->glyph_row);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1455
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1456 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
1457 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
1458 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1459 glyph->charpos = CHARPOS (it->position);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1460 glyph->object = it->object;
30042
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1461 glyph->pixel_width = it->pixel_width;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1462 glyph->voffset = it->voffset;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1463 glyph->type = COMPOSITE_GLYPH;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1464 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
1465 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
1466 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
1467 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
1468 || it->phys_descent > it->descent);
30042
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1469 glyph->padding_p = 0;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1470 glyph->glyph_not_available_p = 0;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1471 glyph->face_id = it->face_id;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1472 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
1473 ++it->glyph_row->used[area];
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1474 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1475 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1476
24991
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 /* 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
1479 IT->voffset. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1480
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1481 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1482 take_vertical_position_into_account (it)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1483 struct it *it;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1484 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1485 if (it->voffset)
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 if (it->voffset < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1488 /* 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
1489 in the line. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1490 it->ascent += abs (it->voffset);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1491 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1492 /* 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
1493 in the line. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1494 it->descent += it->voffset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1495 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1496 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1497
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1498
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1499 /* 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
1500 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
1501 an overview of struct display_iterator. */
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 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1504 x_produce_image_glyph (it)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1505 struct it *it;
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 struct image *img;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1508 struct face *face;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1509
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1510 xassert (it->what == IT_IMAGE);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1511
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1512 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
1513 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
1514 xassert (img);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1515
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1516 /* 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
1517 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
1518 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
1519
28785
796eafcfc070 (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 28686
diff changeset
1520 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
1521 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
1522 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
1523
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1524 it->nglyphs = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1525
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1526 if (face->box != FACE_NO_BOX)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1527 {
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1528 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
1529 {
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1530 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
1531 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
1532 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1533
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1534 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
1535 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
1536 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
1537 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
1538 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1539
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1540 take_vertical_position_into_account (it);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1541
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1542 if (it->glyph_row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1543 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1544 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1545 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
1546
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1547 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
1548 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
1549 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1550 glyph->charpos = CHARPOS (it->position);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1551 glyph->object = it->object;
30042
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1552 glyph->pixel_width = it->pixel_width;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1553 glyph->voffset = it->voffset;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1554 glyph->type = IMAGE_GLYPH;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1555 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
1556 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
1557 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
1558 glyph->overlaps_vertically_p = 0;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1559 glyph->padding_p = 0;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1560 glyph->glyph_not_available_p = 0;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1561 glyph->face_id = it->face_id;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1562 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
1563 ++it->glyph_row->used[area];
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 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1566 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1567
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1568
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1569 /* 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
1570 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
1571 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
1572 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
1573
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1574 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1575 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
1576 struct it *it;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1577 Lisp_Object object;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1578 int width, height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1579 double ascent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1580 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1581 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1582 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
1583
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1584 xassert (ascent >= 0 && ascent <= 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1585
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1586 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
1587 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
1588 {
30042
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1589 glyph->charpos = CHARPOS (it->position);
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1590 glyph->object = object;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1591 glyph->pixel_width = width;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1592 glyph->voffset = it->voffset;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1593 glyph->type = STRETCH_GLYPH;
30042
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1594 glyph->multibyte_p = it->multibyte_p;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1595 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
1596 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
1597 glyph->overlaps_vertically_p = 0;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1598 glyph->padding_p = 0;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1599 glyph->glyph_not_available_p = 0;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1600 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
1601 glyph->u.stretch.ascent = height * ascent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1602 glyph->u.stretch.height = height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1603 ++it->glyph_row->used[area];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1604 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1605 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1606
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 /* 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
1609 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
1610 `(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
1611 being recognized:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1612
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1613 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
1614 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
1615 point number.
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 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
1618 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
1619 `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
1620
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1621 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
1622 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
1623
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1624 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
1625
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1626 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
1627 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
1628
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1629 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
1630 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
1631 the glyph property.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1632
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1633 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
1634
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1635 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
1636 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
1637 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
1638
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1639 #define NUMVAL(X) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1640 ((INTEGERP (X) || FLOATP (X)) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1641 ? XFLOATINT (X) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1642 : - 1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1643
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1644
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1645 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1646 x_produce_stretch_glyph (it)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1647 struct it *it;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1648 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1649 /* (space :width WIDTH :height HEIGHT. */
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1650 #if GLYPH_DEBUG
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1651 extern Lisp_Object Qspace;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1652 #endif
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1653 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
1654 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
1655 extern Lisp_Object QCalign_to;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1656 Lisp_Object prop, plist;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1657 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
1658 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
1659 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
1660
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1661 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
1662
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1663 /* List should start with `space'. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1664 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
1665 plist = XCDR (it->object);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1666
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1667 /* Compute the width of the stretch. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1668 if (prop = Fplist_get (plist, QCwidth),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1669 NUMVAL (prop) > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1670 /* 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
1671 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
1672 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
1673 NUMVAL (prop) > 0)
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 /* 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
1676 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
1677 property. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1678 struct it it2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1679 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
1680
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1681 it2 = *it;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1682 if (it->multibyte_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1683 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1684 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
1685 - IT_BYTEPOS (*it));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1686 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
1687 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1688 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1689 it2.c = *p, it2.len = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1690
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1691 it2.glyph_row = NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1692 it2.what = IT_CHARACTER;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1693 x_produce_glyphs (&it2);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1694 width = NUMVAL (prop) * it2.pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1695 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1696 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
1697 NUMVAL (prop) > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1698 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
1699 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1700 /* 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
1701 width = CANON_X_UNIT (it->f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1702
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1703 /* Compute height. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1704 if (prop = Fplist_get (plist, QCheight),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1705 NUMVAL (prop) > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1706 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
1707 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
1708 NUMVAL (prop) > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1709 height = FONT_HEIGHT (font) * NUMVAL (prop);
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 height = 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 /* 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
1714 `: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
1715 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
1716 if (prop = Fplist_get (plist, QCascent),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1717 NUMVAL (prop) > 0 && NUMVAL (prop) <= 100)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1718 ascent = NUMVAL (prop) / 100.0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1719 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1720 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
1721
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1722 if (width <= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1723 width = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1724 if (height <= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1725 height = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1726
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1727 if (it->glyph_row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1728 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1729 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
1730 if (!STRINGP (object))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1731 object = it->w->buffer;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1732 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
1733 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1734
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1735 it->pixel_width = width;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1736 it->ascent = it->phys_ascent = height * ascent;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1737 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
1738 it->nglyphs = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1739
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1740 if (face->box != FACE_NO_BOX)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1741 {
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1742 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
1743 {
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1744 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
1745 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
1746 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1747
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1748 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
1749 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
1750 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
1751 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
1752 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1753
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1754 take_vertical_position_into_account (it);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1755 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1756
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1757 /* 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
1758 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
1759 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
1760
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1761 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
1762
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1763 -------------------------+-----------+-
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1764 -+-+---------+-+ | |
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 | | | | F_ASCENT F_HEIGHT
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1767 | | | ASCENT | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1768 HEIGHT | | | | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1769 | | |-|-+------+-----------|------- baseline
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1770 | | | | BOFF | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1771 | |---------|-+-+ | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1772 | | | DESCENT | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1773 -+-+---------+-+ F_DESCENT |
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
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1776 -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
1777 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
1778 DESCENT = FONT->descent
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1779 HEIGHT = FONT_HEIGHT (FONT)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1780 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
1781 - 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
1782 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
1783 */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1784
33289
834a6b4f08a4 (VCENTER_BASELINE_OFFSET): Fix previous change. If the
Kenichi Handa <handa@m17n.org>
parents: 33064
diff changeset
1785 #define VCENTER_BASELINE_OFFSET(FONT, F) \
834a6b4f08a4 (VCENTER_BASELINE_OFFSET): Fix previous change. If the
Kenichi Handa <handa@m17n.org>
parents: 33064
diff changeset
1786 ((FONT)->descent \
834a6b4f08a4 (VCENTER_BASELINE_OFFSET): Fix previous change. If the
Kenichi Handa <handa@m17n.org>
parents: 33064
diff changeset
1787 + (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
1788 + (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
1789 - ((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
1790
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1791 /* 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
1792 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
1793 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
1794
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1795 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1796 x_produce_glyphs (it)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1797 struct it *it;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1798 {
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1799 it->glyph_not_available_p = 0;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1800
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1801 if (it->what == IT_CHARACTER)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1802 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1803 XChar2b char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1804 XFontStruct *font;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1805 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
1806 XCharStruct *pcm;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1807 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
1808 struct font_info *font_info;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1809 int boff; /* baseline offset */
32401
be53a078f4e2 (x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents: 31948
diff changeset
1810 /* 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
1811 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
1812 later.
be53a078f4e2 (x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents: 31948
diff changeset
1813
be53a078f4e2 (x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents: 31948
diff changeset
1814 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
1815 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
1816 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
1817 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
1818 glyph.
be53a078f4e2 (x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents: 31948
diff changeset
1819 */
be53a078f4e2 (x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents: 31948
diff changeset
1820 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
1821
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1822 /* 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
1823 other way. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1824 it->char_to_display = it->c;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1825 if (!ASCII_BYTE_P (it->c))
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1826 {
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1827 if (unibyte_display_via_language_environment
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1828 && SINGLE_BYTE_CHAR_P (it->c)
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1829 && (it->c >= 0240
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1830 || !NILP (Vnonascii_translation_table)))
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1831 {
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1832 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
1833 it->multibyte_p = 1;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1834 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
1835 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
1836 }
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1837 else if (!SINGLE_BYTE_CHAR_P (it->c)
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1838 && !it->multibyte_p)
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1839 {
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1840 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
1841 it->multibyte_p = 0;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1842 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
1843 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
1844 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1845 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1846
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1847 /* 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
1848 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
1849 it->face_id, &char2b,
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1850 it->multibyte_p);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1851 font = face->font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1852
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1853 /* 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
1854 font_not_found_p = font == NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1855 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
1856 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1857 font = FRAME_FONT (it->f);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1858 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
1859 font_info = NULL;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1860 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1861 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1862 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1863 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
1864 boff = font_info->baseline_offset;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1865 if (font_info->vertical_centering)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1866 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
1867 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1868
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1869 if (it->char_to_display >= ' '
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1870 && (!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
1871 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1872 /* Either unibyte or ASCII. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1873 int stretched_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1874
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1875 it->nglyphs = 1;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1876
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1877 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
1878 it->ascent = font->ascent + boff;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1879 it->descent = font->descent - boff;
28443
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1880
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1881 if (pcm)
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1882 {
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1883 it->phys_ascent = pcm->ascent + boff;
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1884 it->phys_descent = pcm->descent - boff;
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1885 it->pixel_width = pcm->width;
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1886 }
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1887 else
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1888 {
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1889 it->glyph_not_available_p = 1;
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1890 it->phys_ascent = font->ascent + boff;
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1891 it->phys_descent = font->descent - boff;
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1892 it->pixel_width = FONT_WIDTH (font);
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1893 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1894
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1895 /* 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
1896 `space-width' property, change its width. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1897 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
1898 if (stretched_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1899 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
1900
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1901 /* 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
1902 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
1903 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
1904 if (face->box != FACE_NO_BOX)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1905 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1906 int thick = face->box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1907
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1908 if (thick > 0)
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1909 {
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1910 it->ascent += thick;
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1911 it->descent += thick;
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1912 }
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1913 else
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1914 thick = -thick;
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1915
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1916 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
1917 it->pixel_width += thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1918 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
1919 it->pixel_width += thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1920 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1921
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1922 /* 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
1923 (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
1924 if (face->overline_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1925 it->ascent += 2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1926
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1927 take_vertical_position_into_account (it);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1928
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1929 /* If 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
1930 if (it->glyph_row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1931 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1932 if (stretched_p)
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 /* 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
1935 into a stretch glyph. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1936 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
1937 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
1938 it->ascent + it->descent, ascent);
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 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1941 x_append_glyph (it);
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 /* 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
1944 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
1945 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
1946 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
1947 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
1948 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1949 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1950 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
1951 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1952 /* 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
1953 it->pixel_width = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1954 it->nglyphs = 0;
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1955 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
1956 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
1957
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1958 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
1959 && face->box_line_width > 0)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1960 {
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1961 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
1962 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
1963 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1964 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1965 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
1966 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1967 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
1968 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
1969 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
1970
410df09028db (x_produce_glyphs): If the distance from the current
Gerd Moellmann <gerd@gnu.org>
parents: 31489
diff changeset
1971 /* 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
1972 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
1973 tab stop after that. */
410df09028db (x_produce_glyphs): If the distance from the current
Gerd Moellmann <gerd@gnu.org>
parents: 31489
diff changeset
1974 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
1975 next_tab_x += tab_width;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1976
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1977 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
1978 it->nglyphs = 1;
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1979 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
1980 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
1981
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1982 if (it->glyph_row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1983 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1984 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
1985 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
1986 it->ascent + it->descent, ascent);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1987 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1988 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1989 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1990 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1991 /* 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
1992 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
1993 width of the font. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1994
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1995 /* 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
1996 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
1997 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
1998 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
1999 did. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2000 pcm = x_per_char_metric (font, &char2b);
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2001 if (font_not_found_p || !pcm)
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2002 {
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2003 int charset = CHAR_CHARSET (it->char_to_display);
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2004
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2005 it->glyph_not_available_p = 1;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2006 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
2007 * CHARSET_WIDTH (charset));
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2008 it->phys_ascent = font->ascent + boff;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2009 it->phys_descent = font->descent - boff;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2010 }
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2011 else
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2012 {
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2013 it->pixel_width = pcm->width;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2014 it->phys_ascent = pcm->ascent + boff;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2015 it->phys_descent = pcm->descent - boff;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2016 if (it->glyph_row
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2017 && (pcm->lbearing < 0
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2018 || pcm->rbearing > pcm->width))
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2019 it->glyph_row->contains_overlapping_glyphs_p = 1;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2020 }
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2021 it->nglyphs = 1;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2022 it->ascent = font->ascent + boff;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2023 it->descent = font->descent - boff;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2024 if (face->box != FACE_NO_BOX)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2025 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2026 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
2027
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2028 if (thick > 0)
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2029 {
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2030 it->ascent += thick;
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2031 it->descent += thick;
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2032 }
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2033 else
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2034 thick = - thick;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2035
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2036 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
2037 it->pixel_width += thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2038 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
2039 it->pixel_width += thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2040 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2041
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2042 /* 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
2043 (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
2044 if (face->overline_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2045 it->ascent += 2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2046
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2047 take_vertical_position_into_account (it);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2048
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2049 if (it->glyph_row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2050 x_append_glyph (it);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2051 }
32401
be53a078f4e2 (x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents: 31948
diff changeset
2052 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
2053 }
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2054 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
2055 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2056 /* 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
2057 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
2058 XChar2b char2b;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2059 XFontStruct *font;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2060 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
2061 XCharStruct *pcm;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2062 int font_not_found_p;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2063 struct font_info *font_info;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2064 int boff; /* baseline offset */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2065 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
2066
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2067 /* 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
2068 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
2069 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
2070 && 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
2071 && (it->c >= 0240
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2072 || (it->c >= 0200
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2073 && !NILP (Vnonascii_translation_table))))
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2074 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2075 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
2076 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2077
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2078 /* 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
2079 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
2080 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
2081 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
2082 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
2083 font = face->font;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2084
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2085 /* 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
2086 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
2087 if (font_not_found_p)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2088 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2089 font = FRAME_FONT (it->f);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2090 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
2091 font_info = NULL;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2092 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2093 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2094 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2095 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
2096 boff = font_info->baseline_offset;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2097 if (font_info->vertical_centering)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2098 boff = VCENTER_BASELINE_OFFSET (font, it->f) - boff;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2099 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2100
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2101 /* 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
2102 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
2103 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
2104 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
2105 it->nglyphs = 1;
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 /* 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
2108 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
2109 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
2110 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
2111 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
2112 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
2113 correct the display anyway. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2114 if (cmp->font != (void *) font)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2115 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2116 /* 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
2117 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
2118 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
2119 them respectively. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2120 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
2121 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
2122 /* 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
2123 int leftmost, rightmost, lowest, highest;
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2124 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
2125
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2126 cmp->font = (void *) font;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2127
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2128 /* 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
2129 if (font_info
a734985ec0bc (x_produce_glyphs): If a font for a component of
Kenichi Handa <handa@m17n.org>
parents: 34099
diff changeset
2130 && (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
2131 {
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2132 width = pcm->width;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2133 ascent = pcm->ascent;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2134 descent = pcm->descent;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2135 }
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2136 else
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2137 {
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2138 width = FONT_WIDTH (font);
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2139 ascent = font->ascent;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2140 descent = font->descent;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2141 }
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2142
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2143 rightmost = width;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2144 lowest = - descent + boff;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2145 highest = ascent + boff;
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2146 leftmost = 0;
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2147
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2148 if (font_info
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2149 && font_info->default_ascent
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2150 && 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
2151 && !NILP (Faref (Vuse_default_ascent,
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2152 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
2153 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
2154
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2155 /* 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
2156 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
2157 the left. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2158 cmp->offsets[0] = 0;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2159 cmp->offsets[1] = boff;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2160
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2161 /* 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
2162 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
2163 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2164 int left, right, btm, top;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2165 int ch = COMPOSITION_GLYPH (cmp, i);
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2166 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
2167
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2168 face = FACE_FROM_ID (it->f, face_id);
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2169 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
2170 it->multibyte_p);
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2171 font = face->font;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2172 if (font == NULL)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2173 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2174 font = FRAME_FONT (it->f);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2175 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
2176 font_info = NULL;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2177 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2178 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2179 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2180 font_info
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2181 = 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
2182 boff = font_info->baseline_offset;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2183 if (font_info->vertical_centering)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2184 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
2185 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2186
34159
a734985ec0bc (x_produce_glyphs): If a font for a component of
Kenichi Handa <handa@m17n.org>
parents: 34099
diff changeset
2187 if (font_info
a734985ec0bc (x_produce_glyphs): If a font for a component of
Kenichi Handa <handa@m17n.org>
parents: 34099
diff changeset
2188 && (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
2189 {
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2190 width = pcm->width;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2191 ascent = pcm->ascent;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2192 descent = pcm->descent;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2193 }
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2194 else
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2195 {
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2196 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
2197 ascent = 1;
a734985ec0bc (x_produce_glyphs): If a font for a component of
Kenichi Handa <handa@m17n.org>
parents: 34099
diff changeset
2198 descent = 0;
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2199 }
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2200
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2201 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
2202 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2203 /* Relative composition with or without
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2204 alternate chars. */
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2205 left = (leftmost + rightmost - width) / 2;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2206 btm = - descent + boff;
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2207 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
2208 && (! 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
2209 || NILP (Faref (Vignore_relative_composition,
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2210 make_number (ch)))))
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
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2213 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
2214 /* 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
2215 btm = highest + 1;
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2216 else if (ascent <= 0)
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2217 /* One extra pixel between two glyphs. */
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2218 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
2219 }
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 else
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 /* 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
2224 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
2225 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
2226 specified by numbers as below:
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2227
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2228 0---1---2 -- ascent
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2229 | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2230 | |
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 9--10--11 -- center
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2233 | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2234 ---3---4---5--- baseline
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 6---7---8 -- descent
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2237 */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2238 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
2239 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
2240
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2241 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
2242 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
2243 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
2244
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2245 left = (leftmost
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2246 + grefx * (rightmost - leftmost) / 2
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2247 - nrefx * width / 2);
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2248 btm = ((grefy == 0 ? highest
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2249 : grefy == 1 ? 0
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2250 : grefy == 2 ? lowest
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2251 : (highest + lowest) / 2)
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2252 - (nrefy == 0 ? ascent + descent
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2253 : nrefy == 1 ? descent - boff
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2254 : nrefy == 2 ? 0
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2255 : (ascent + descent) / 2));
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2256 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2257
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2258 cmp->offsets[i * 2] = left;
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2259 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
2260
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2261 /* 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
2262 right = left + width;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2263 top = btm + descent + ascent;
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2264 if (left < leftmost)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2265 leftmost = left;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2266 if (right > rightmost)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2267 rightmost = right;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2268 if (top > highest)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2269 highest = top;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2270 if (btm < lowest)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2271 lowest = btm;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2272 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2273
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2274 /* 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
2275 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
2276 non-negative. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2277 if (leftmost < 0)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2278 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2279 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
2280 cmp->offsets[i * 2] -= leftmost;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2281 rightmost -= leftmost;
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 cmp->pixel_width = rightmost;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2285 cmp->ascent = highest;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2286 cmp->descent = - lowest;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2287 if (cmp->ascent < font_ascent)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2288 cmp->ascent = font_ascent;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2289 if (cmp->descent < font_descent)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2290 cmp->descent = font_descent;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2291 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2292
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2293 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
2294 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
2295 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
2296
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2297 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
2298 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2299 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
2300
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2301 if (thick > 0)
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2302 {
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2303 it->ascent += thick;
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2304 it->descent += thick;
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2305 }
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2306 else
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2307 thick = - thick;
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2308
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2309 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
2310 it->pixel_width += thick;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2311 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
2312 it->pixel_width += thick;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2313 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2314
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2315 /* 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
2316 (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
2317 if (face->overline_p)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2318 it->ascent += 2;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2319
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2320 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
2321
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2322 if (it->glyph_row)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2323 x_append_composite_glyph (it);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2324 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2325 else if (it->what == IT_IMAGE)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2326 x_produce_image_glyph (it);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2327 else if (it->what == IT_STRETCH)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2328 x_produce_stretch_glyph (it);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2329
29458
679888a29324 (x_produce_glyphs): Don't xassert `it->descent > 0';
Gerd Moellmann <gerd@gnu.org>
parents: 29435
diff changeset
2330 /* 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
2331 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
2332 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
2333 if (it->area == TEXT_AREA)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2334 it->current_x += it->pixel_width;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2335
28686
b02f0d91b5aa (x_produce_glyphs): Remove reference to struct it's
Gerd Moellmann <gerd@gnu.org>
parents: 28629
diff changeset
2336 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
2337
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2338 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
2339 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
2340 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
2341 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
2342 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2343
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2344
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2345 /* 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
2346 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
2347
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2348 int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2349 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
2350 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2351 enum face_id face_id;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2352 {
34030
f9d77d3fc85d (x_estimate_mode_line_height): If `mode-line' face
Gerd Moellmann <gerd@gnu.org>
parents: 34008
diff changeset
2353 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
2354
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2355 /* 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
2356 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
2357 if (FRAME_FACE_CACHE (f))
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 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
2360 if (face)
34030
f9d77d3fc85d (x_estimate_mode_line_height): If `mode-line' face
Gerd Moellmann <gerd@gnu.org>
parents: 34008
diff changeset
2361 {
f9d77d3fc85d (x_estimate_mode_line_height): If `mode-line' face
Gerd Moellmann <gerd@gnu.org>
parents: 34008
diff changeset
2362 if (face->font)
f9d77d3fc85d (x_estimate_mode_line_height): If `mode-line' face
Gerd Moellmann <gerd@gnu.org>
parents: 34008
diff changeset
2363 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
2364 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
2365 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
2366 }
24991
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2369 return height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2370 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2371
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2372
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2373 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2374 Glyph display
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2375 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2376
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2377 /* 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
2378
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2379 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
2380 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
2381 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
2382 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
2383
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2384 struct glyph_string
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 /* X-origin of the string. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2387 int x;
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 /* 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
2390 int y, ybase;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2391
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2392 /* The 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
2393 int width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2394
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2395 /* 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
2396 int background_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2397
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2398 /* 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
2399 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
2400 font the string is drawn in. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2401 int height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2402
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2403 /* 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
2404 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
2405 -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
2406 int left_overhang;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2407
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2408 /* 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
2409 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
2410 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
2411 int right_overhang;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2412
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2413 /* 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
2414 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2415
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2416 /* 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
2417 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2418
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2419 /* X display and window for convenience. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2420 Display *display;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2421 Window window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2422
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2423 /* 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
2424 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
2425 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2426
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2427 /* The area within row. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2428 enum glyph_row_area area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2429
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2430 /* 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
2431 XChar2b *char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2432 int nchars;
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 /* 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
2435 enum draw_glyphs_face hl;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2436
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2437 /* 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
2438 struct face *face;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2439
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2440 /* 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
2441 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2442
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2443 /* Font info for this string. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2444 struct font_info *font_info;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2445
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2446 /* 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
2447 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
2448 struct composition *cmp;
24991
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 /* 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
2451 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
2452 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
2453 int gidx;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2454
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2455 /* 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
2456 of the window's drawing area. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2457 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
2458
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2459 /* 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
2460 unsigned background_filled_p : 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2461
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2462 /* 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
2463 unsigned two_byte_p : 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2464
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2465 /* 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
2466 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
2467 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
2468 unsigned font_not_found_p : 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2469
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2470 /* 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
2471 stipple pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2472 unsigned stippled_p : 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2473
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2474 /* 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
2475 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
2476 string appears in as clip rect. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2477 unsigned for_overlaps_p : 1;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2478
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2479 /* 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
2480 GC gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2481
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2482 /* 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
2483 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
2484 font_not_found_p is 1. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2485 struct glyph *first_glyph;
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 /* Image, if any. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2488 struct image *img;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2489
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2490 struct glyph_string *next, *prev;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2491 };
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2492
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2493
36795
e7722a221c28 (x_draw_glyph_string_box): Don't draw a full-width
Gerd Moellmann <gerd@gnu.org>
parents: 36776
diff changeset
2494 #if 1
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2495
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2496 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2497 x_dump_glyph_string (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2498 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2499 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2500 fprintf (stderr, "glyph string\n");
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2501 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
2502 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
2503 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
2504 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
2505 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
2506 s->left_overhang, s->right_overhang);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2507 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
2508 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
2509 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
2510 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
2511 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
2512 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2513
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2514 #endif /* GLYPH_DEBUG */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2515
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2516
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2517
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2518 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
2519 struct glyph_string **,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2520 struct glyph_string *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2521 struct glyph_string *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2522 static void x_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
2523 struct glyph_string **,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2524 struct glyph_string *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2525 struct glyph_string *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2526 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
2527 struct glyph_string **,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2528 struct glyph_string *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2529 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
2530 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
2531 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
2532 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
2533 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
2534 int));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2535 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
2536 XChar2b *, struct window *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2537 struct glyph_row *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2538 enum glyph_row_area, int,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2539 enum draw_glyphs_face));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2540 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
2541 enum glyph_row_area, int, int,
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2542 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
2543 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
2544 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
2545 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
2546 int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2547 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
2548 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
2549 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
2550 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
2551 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
2552 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
2553 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
2554 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
2555 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
2556 int *, int *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2557 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
2558 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
2559 unsigned long *, double, int));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2560 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
2561 double, int, unsigned long));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2562 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
2563 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
2564 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
2565 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
2566 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
2567 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
2568 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
2569 int, int, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2570 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
2571 int, int, int, int, XRectangle *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2572 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
2573 int, int, int, XRectangle *));
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2574 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
2575 enum glyph_row_area));
30137
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
2576 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
2577 struct glyph_row *,
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
2578 enum glyph_row_area, int, int));
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2579
29619
d171b4754825 (x_check_font) [GLYPH_DEBUG]: Add prototype.
Gerd Moellmann <gerd@gnu.org>
parents: 29600
diff changeset
2580 #if GLYPH_DEBUG
d171b4754825 (x_check_font) [GLYPH_DEBUG]: Add prototype.
Gerd Moellmann <gerd@gnu.org>
parents: 29600
diff changeset
2581 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
2582 #endif
d171b4754825 (x_check_font) [GLYPH_DEBUG]: Add prototype.
Gerd Moellmann <gerd@gnu.org>
parents: 29600
diff changeset
2583
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2584
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2585 /* 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
2586 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
2587
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2588 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2589 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
2590 struct glyph_string **head, **tail;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2591 struct glyph_string *h, *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 if (h)
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 if (*head)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2596 (*tail)->next = h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2597 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2598 *head = h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2599 h->prev = *tail;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2600 *tail = t;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2601 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2602 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2603
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 /* 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
2606 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
2607 result. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2608
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2609 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2610 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
2611 struct glyph_string **head, **tail;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2612 struct glyph_string *h, *t;
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 if (h)
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 if (*head)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2617 (*head)->prev = t;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2618 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2619 *tail = t;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2620 t->next = *head;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2621 *head = h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2622 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2623 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2624
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2625
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2626 /* 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
2627 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
2628
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2629 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2630 x_append_glyph_string (head, tail, s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2631 struct glyph_string **head, **tail;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2632 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2633 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2634 s->next = s->prev = NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2635 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
2636 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2637
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2638
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2639 /* 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
2640 face. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2641
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2642 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2643 x_set_cursor_gc (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2644 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2645 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2646 if (s->font == FRAME_FONT (s->f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2647 && 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
2648 && 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
2649 && !s->cmp)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2650 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
2651 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2652 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2653 /* 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
2654 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2655 unsigned long mask;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2656
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2657 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
2658 xgcv.foreground = s->face->background;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2659
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2660 /* 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
2661 if (xgcv.foreground == xgcv.background)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2662 xgcv.foreground = s->face->foreground;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2663 if (xgcv.foreground == xgcv.background)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2664 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
2665 if (xgcv.foreground == xgcv.background)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2666 xgcv.foreground = s->face->foreground;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2667
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2668 /* 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
2669 if (xgcv.background == s->face->background
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2670 && xgcv.foreground == s->face->foreground)
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 xgcv.background = s->face->foreground;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2673 xgcv.foreground = s->face->background;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2674 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2675
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2676 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
2677 xgcv.font = s->font->fid;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2678 xgcv.graphics_exposures = False;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2679 mask = GCForeground | GCBackground | GCFont | GCGraphicsExposures;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2680
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2681 if (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
2682 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
2683 mask, &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2684 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2685 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
2686 = 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
2687
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2688 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
2689 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2690 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2691
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2692
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2693 /* 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
2694
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2695 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2696 x_set_mouse_face_gc (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2697 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2698 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2699 int face_id;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2700 struct face *face;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2701
35315
1f5511b1d5ea (x_set_mouse_face_gc): If the last use mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 35309
diff changeset
2702 /* 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
2703 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
2704 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
2705 if (face == NULL)
1f5511b1d5ea (x_set_mouse_face_gc): If the last use mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 35309
diff changeset
2706 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
2707
29393
3ad9354ade23 (x_set_mouse_face_gc): If first glyph isn't a character
Gerd Moellmann <gerd@gnu.org>
parents: 28793
diff changeset
2708 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
2709 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
2710 else
3ad9354ade23 (x_set_mouse_face_gc): If first glyph isn't a character
Gerd Moellmann <gerd@gnu.org>
parents: 28793
diff changeset
2711 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
2712 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
2713 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
2714
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2715 /* 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
2716 if (s->font == s->face->font)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2717 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2718 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2719 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2720 /* 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
2721 but font FONT. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2722 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2723 unsigned long mask;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2724
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2725 xgcv.background = s->face->background;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2726 xgcv.foreground = s->face->foreground;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2727 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
2728 xgcv.font = s->font->fid;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2729 xgcv.graphics_exposures = False;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2730 mask = GCForeground | GCBackground | GCFont | GCGraphicsExposures;
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 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
2733 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
2734 mask, &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2735 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2736 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
2737 = 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
2738
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2739 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
2740 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2741
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2742 xassert (s->gc != 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2743 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2744
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2745
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2746 /* 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
2747 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
2748 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
2749
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2750 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2751 x_set_mode_line_face_gc (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2752 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2753 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2754 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2755 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2756
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2757
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2758 /* 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
2759 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
2760 pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2761
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2762 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2763 x_set_glyph_string_gc (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2764 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2765 {
30137
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
2766 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
2767
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2768 if (s->hl == DRAW_NORMAL_TEXT)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2769 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2770 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2771 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
2772 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2773 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
2774 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2775 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
2776 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
2777 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2778 else if (s->hl == DRAW_CURSOR)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2779 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2780 x_set_cursor_gc (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2781 s->stippled_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2782 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2783 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
2784 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2785 x_set_mouse_face_gc (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2786 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
2787 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2788 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
2789 || s->hl == DRAW_IMAGE_SUNKEN)
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 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2792 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
2793 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2794 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2795 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2796 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2797 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
2798 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2799
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2800 /* GC must have been set. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2801 xassert (s->gc != 0);
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
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 /* 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
2806
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2807 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2808 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
2809 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2810 XRectangle *r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2811 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2812 if (s->row->full_width_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2813 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2814 /* 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
2815 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
2816
3a09aae52441 (x_get_glyph_string_clip_rect): Take internal border
Gerd Moellmann <gerd@gnu.org>
parents: 25068
diff changeset
2817 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
2818 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
2819
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2820 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
2821 {
25079
3a09aae52441 (x_get_glyph_string_clip_rect): Take internal border
Gerd Moellmann <gerd@gnu.org>
parents: 25068
diff changeset
2822 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
2823 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
2824 r->x -= width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2825 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2826
25083
d3b7d7d2bca8 (x_setup_relief_color): Don't try smart color allocation
Gerd Moellmann <gerd@gnu.org>
parents: 25079
diff changeset
2827 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
2828
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2829 /* 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
2830 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
2831 if (s->w->pseudo_window_p)
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 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2834 r->height = s->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2835 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2836 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2837 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2838 /* 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
2839 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
2840 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
2841 r->height = s->row->visible_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2842 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2843
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2844 /* 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
2845 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
2846 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
2847 if (!s->row->full_width_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2848 && MATRIX_ROW_PARTIALLY_VISIBLE_AT_TOP_P (s->w, s->row))
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
2849 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
2850 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2851 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
2852
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
2853 /* 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
2854 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
2855 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
2856 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
2857
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2858 /* 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
2859 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
2860 intentionally draws over other lines. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2861 if (s->for_overlaps_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2862 {
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
2863 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
2864 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
2865 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2866
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2867 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
2868 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2869
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2870
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2871 /* 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
2872 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
2873
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2874 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2875 x_set_glyph_string_clipping (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2876 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2877 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2878 XRectangle r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2879 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
2880 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
2881 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2882
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2883
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2884 /* 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
2885 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
2886
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2887 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2888 x_compute_glyph_string_overhangs (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2889 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2890 {
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2891 if (s->cmp == NULL
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2892 && s->first_glyph->type == CHAR_GLYPH)
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 XCharStruct cs;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2895 int direction, font_ascent, font_descent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2896 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
2897 &font_ascent, &font_descent, &cs);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2898 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
2899 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
2900 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2901 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2902
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2903
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2904 /* 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
2905 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
2906 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
2907
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2908 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2909 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
2910 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2911 int x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2912 int backward_p;
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 if (backward_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2915 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2916 while (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2917 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2918 x_compute_glyph_string_overhangs (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2919 x -= s->width;
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 s = s->prev;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2922 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2923 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2924 else
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 while (s)
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 x_compute_glyph_string_overhangs (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2929 s->x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2930 x += s->width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2931 s = s->next;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2932 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2933 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2934 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2935
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2936
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2937 /* 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
2938 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
2939 assumed to be zero. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2940
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2941 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2942 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
2943 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2944 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2945 int *left, *right;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2946 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2947 *left = *right = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2948
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2949 if (glyph->type == CHAR_GLYPH)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2950 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2951 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2952 struct face *face;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2953 struct font_info *font_info;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2954 XChar2b char2b;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2955 XCharStruct *pcm;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2956
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2957 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
2958 font = face->font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2959 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
2960 if (font
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2961 && (pcm = x_per_char_metric (font, &char2b)))
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2962 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2963 if (pcm->rbearing > pcm->width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2964 *right = pcm->rbearing - pcm->width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2965 if (pcm->lbearing < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2966 *left = -pcm->lbearing;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2967 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2968 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2969 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2972 /* 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
2973 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
2974 if no glyphs are overwritten. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2975
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2976 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2977 x_left_overwritten (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2978 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2979 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2980 int k;
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 if (s->left_overhang)
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 int x = 0, i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2985 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
2986 int first = s->first_glyph - glyphs;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2987
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2988 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
2989 x -= glyphs[i].pixel_width;
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 k = i + 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2992 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2993 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2994 k = -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2995
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2996 return k;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2997 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3000 /* 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
3001 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
3002 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
3003
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3004 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3005 x_left_overwriting (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3006 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3007 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3008 int i, k, x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3009 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
3010 int first = s->first_glyph - glyphs;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3011
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3012 k = -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3013 x = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3014 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
3015 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3016 int left, right;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3017 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
3018 if (x + right > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3019 k = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3020 x -= glyphs[i].pixel_width;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3023 return k;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3024 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3025
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3026
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3027 /* 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
3028 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
3029 no such glyph is found. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3030
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3031 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3032 x_right_overwritten (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3033 struct glyph_string *s;
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 int k = -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3036
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3037 if (s->right_overhang)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3038 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3039 int x = 0, i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3040 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
3041 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
3042 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
3043
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3044 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
3045 x += glyphs[i].pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3046
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3047 k = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3048 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3049
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3050 return k;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3051 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3054 /* 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
3055 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
3056 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
3057
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
3058 static int
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3059 x_right_overwriting (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3060 struct glyph_string *s;
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 i, k, x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3063 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
3064 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
3065 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
3066
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3067 k = -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3068 x = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3069 for (i = first; i < end; ++i)
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 int left, right;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3072 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
3073 if (x - left < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3074 k = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3075 x += glyphs[i].pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3076 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3077
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3078 return k;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3081
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3082 /* 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
3083
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3084 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3085 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
3086 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3087 int x, y, w, h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3088 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3089 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3090 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
3091 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
3092 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
3093 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
3094 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3095
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3096
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3097 /* 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
3098 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
3099 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
3100 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
3101 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
3102
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3103 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3104 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
3105 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3106 int force_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3107 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3108 /* 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
3109 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
3110 if (!s->background_filled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3111 {
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
3112 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
3113
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3114 if (s->stippled_p)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3115 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3116 /* Fill background with a stipple pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3117 XSetFillStyle (s->display, s->gc, FillOpaqueStippled);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3118 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
3119 s->y + box_line_width,
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3120 s->background_width,
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
3121 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
3122 XSetFillStyle (s->display, s->gc, FillSolid);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3123 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3124 }
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
3125 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
3126 || s->font_not_found_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3127 || 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
3128 || force_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3129 {
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
3130 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
3131 s->background_width,
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
3132 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
3133 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3134 }
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 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3139 /* 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
3140
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3141 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3142 x_draw_glyph_string_foreground (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3143 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3144 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3145 int i, x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3146
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3147 /* 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
3148 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
3149 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
3150 && 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
3151 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
3152 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3153 x = s->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3154
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3155 /* 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
3156 loaded. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3157 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
3158 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3159 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
3160 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3161 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
3162 XDrawRectangle (s->display, s->window,
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3163 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
3164 s->height - 1);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3165 x += g->pixel_width;
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 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3168 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3169 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3170 char *char1b = (char *) s->char2b;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3171 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
3172
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3173 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
3174 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
3175
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3176 /* 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
3177 if (!s->two_byte_p)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3178 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
3179 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
3180
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3181 /* 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
3182 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
3183 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
3184 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
3185 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
3186 if (s->for_overlaps_p
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3187 || (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
3188 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3189 /* 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
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 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
3192 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
3193 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3194 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
3195 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
3196 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3197 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3198 {
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3199 if (s->two_byte_p)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3200 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
3201 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
3202 else
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3203 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
3204 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
3205 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3206 }
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
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3209 /* 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
3210
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3211 static void
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3212 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
3213 struct glyph_string *s;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3214 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3215 int i, x;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3216
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3217 /* 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
3218 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
3219 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
3220 && 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
3221 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
3222 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3223 x = s->x;
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 /* 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
3226 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
3227 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
3228 this composition. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3229
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3230 /* 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
3231 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
3232 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
3233 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3234 if (s->gidx == 0)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3235 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
3236 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
3237 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3238 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3239 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3240 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
3241 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
3242 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
3243 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
3244 s->char2b + i, 1);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3245 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3246 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3247
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3248
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3249 #ifdef USE_X_TOOLKIT
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3250
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3251 static struct frame *x_frame_of_widget P_ ((Widget));
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3252 static Boolean cvt_string_to_pixel P_ ((Display *, XrmValue *, Cardinal *,
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3253 XrmValue *, XrmValue *, XtPointer *));
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3254 static void cvt_pixel_dtor P_ ((XtAppContext, XrmValue *, XtPointer,
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3255 XrmValue *, Cardinal *));
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3256
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3257
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3258 /* 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
3259 cannot be determined. */
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3260
29749
4235764941b5 (x_frame_of_widget): Add `static' to declaration (for pcc).
Dave Love <fx@gnu.org>
parents: 29744
diff changeset
3261 static struct frame *
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3262 x_frame_of_widget (widget)
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3263 Widget widget;
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3264 {
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3265 struct x_display_info *dpyinfo;
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
3266 Lisp_Object tail;
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3267 struct frame *f;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3268
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3269 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
3270
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3271 /* 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
3272 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
3273 (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
3274 x_any_window_to_frame. */
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3275 while (!XtIsTopLevelShell (widget))
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3276 widget = XtParent (widget);
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3277
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3278 /* 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
3279 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
3280 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
3281 if (GC_FRAMEP (XCAR (tail))
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3282 && (f = XFRAME (XCAR (tail)),
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3283 (f->output_data.nothing != 1
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3284 && FRAME_X_DISPLAY_INFO (f) == dpyinfo))
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3285 && f->output_data.x->widget == widget)
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3286 return f;
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3287
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3288 abort ();
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3289 }
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3290
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3291
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3292 /* 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
3293 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
3294 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
3295 if successful. This is called from lwlib. */
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3296
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3297 int
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3298 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
3299 Widget widget;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3300 Colormap cmap;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3301 XColor *color;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3302 {
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3303 struct frame *f = x_frame_of_widget (widget);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3304 return x_alloc_nearest_color (f, cmap, color);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3305 }
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3306
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3307
31340
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3308 /* 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
3309 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
3310 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
3311 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
3312 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
3313 Value is non-zero if successful. */
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 int
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3316 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
3317 Widget widget;
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3318 Display *display;
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3319 Colormap cmap;
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3320 unsigned long *pixel;
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3321 double factor;
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3322 int delta;
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3323 {
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3324 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
3325 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
3326 }
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3327
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
3328
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3329 /* Structure specifying which arguments should be passed by Xt to
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3330 cvt_string_to_pixel. We want the widget's screen and colormap. */
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3331
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3332 static XtConvertArgRec cvt_string_to_pixel_args[] =
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3333 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3334 {XtWidgetBaseOffset, (XtPointer) XtOffset (Widget, core.screen),
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3335 sizeof (Screen *)},
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3336 {XtWidgetBaseOffset, (XtPointer) XtOffset (Widget, core.colormap),
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3337 sizeof (Colormap)}
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3338 };
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3339
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3340
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3341 /* The address of this variable is returned by
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3342 cvt_string_to_pixel. */
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3343
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3344 static Pixel cvt_string_to_pixel_value;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3345
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3346
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3347 /* Convert a color name to a pixel color.
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3348
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3349 DPY is the display we are working on.
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3350
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3351 ARGS is an array of *NARGS XrmValue structures holding additional
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3352 information about the widget for which the conversion takes place.
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3353 The contents of this array are determined by the specification
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3354 in cvt_string_to_pixel_args.
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3355
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3356 FROM is a pointer to an XrmValue which points to the color name to
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3357 convert. TO is an XrmValue in which to return the pixel color.
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3358
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3359 CLOSURE_RET is a pointer to user-data, in which we record if
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3360 we allocated the color or not.
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3361
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3362 Value is True if successful, False otherwise. */
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3363
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3364 static Boolean
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3365 cvt_string_to_pixel (dpy, args, nargs, from, to, closure_ret)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3366 Display *dpy;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3367 XrmValue *args;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3368 Cardinal *nargs;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3369 XrmValue *from, *to;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3370 XtPointer *closure_ret;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3371 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3372 Screen *screen;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3373 Colormap cmap;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3374 Pixel pixel;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3375 String color_name;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3376 XColor color;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3377
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3378 if (*nargs != 2)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3379 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3380 XtAppWarningMsg (XtDisplayToApplicationContext (dpy),
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3381 "wrongParameters", "cvt_string_to_pixel",
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3382 "XtToolkitError",
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3383 "Screen and colormap args required", NULL, NULL);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3384 return False;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3385 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3386
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3387 screen = *(Screen **) args[0].addr;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3388 cmap = *(Colormap *) args[1].addr;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3389 color_name = (String) from->addr;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3390
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3391 if (strcmp (color_name, XtDefaultBackground) == 0)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3392 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3393 *closure_ret = (XtPointer) False;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3394 pixel = WhitePixelOfScreen (screen);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3395 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3396 else if (strcmp (color_name, XtDefaultForeground) == 0)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3397 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3398 *closure_ret = (XtPointer) False;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3399 pixel = BlackPixelOfScreen (screen);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3400 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3401 else if (XParseColor (dpy, cmap, color_name, &color)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3402 && x_alloc_nearest_color_1 (dpy, cmap, &color))
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3403 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3404 pixel = color.pixel;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3405 *closure_ret = (XtPointer) True;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3406 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3407 else
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3408 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3409 String params[1];
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3410 Cardinal nparams = 1;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3411
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3412 params[0] = color_name;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3413 XtAppWarningMsg (XtDisplayToApplicationContext (dpy),
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3414 "badValue", "cvt_string_to_pixel",
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3415 "XtToolkitError", "Invalid color `%s'",
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3416 params, &nparams);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3417 return False;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3418 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3419
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3420 if (to->addr != NULL)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3421 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3422 if (to->size < sizeof (Pixel))
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3423 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3424 to->size = sizeof (Pixel);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3425 return False;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3426 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3427
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3428 *(Pixel *) to->addr = pixel;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3429 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3430 else
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3431 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3432 cvt_string_to_pixel_value = pixel;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3433 to->addr = (XtPointer) &cvt_string_to_pixel_value;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3434 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3435
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3436 to->size = sizeof (Pixel);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3437 return True;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3438 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3439
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3440
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3441 /* Free a pixel color which was previously allocated via
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3442 cvt_string_to_pixel. This is registered as the destructor
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3443 for this type of resource via XtSetTypeConverter.
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3444
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3445 APP is the application context in which we work.
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3446
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3447 TO is a pointer to an XrmValue holding the color to free.
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3448 CLOSURE is the value we stored in CLOSURE_RET for this color
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3449 in cvt_string_to_pixel.
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3450
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3451 ARGS and NARGS are like for cvt_string_to_pixel. */
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3452
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3453 static void
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3454 cvt_pixel_dtor (app, to, closure, args, nargs)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3455 XtAppContext app;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3456 XrmValuePtr to;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3457 XtPointer closure;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3458 XrmValuePtr args;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3459 Cardinal *nargs;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3460 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3461 if (*nargs != 2)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3462 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3463 XtAppWarningMsg (app, "wrongParameters", "cvt_pixel_dtor",
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3464 "XtToolkitError",
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3465 "Screen and colormap arguments required",
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3466 NULL, NULL);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3467 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3468 else if (closure != NULL)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3469 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3470 /* We did allocate the pixel, so free it. */
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3471 Screen *screen = *(Screen **) args[0].addr;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3472 Colormap cmap = *(Colormap *) args[1].addr;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3473 x_free_dpy_colors (DisplayOfScreen (screen), screen, cmap,
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3474 (Pixel *) to->addr, 1, 0);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3475 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3476 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3477
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3478
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3479 #endif /* USE_X_TOOLKIT */
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3480
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3481
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3482 /* Value is an array of XColor structures for the contents of the
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3483 color map of display DPY. Set *NCELLS to the size of the array.
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3484 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
3485 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
3486
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3487 static const XColor *
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3488 x_color_cells (dpy, ncells)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3489 Display *dpy;
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3490 int *ncells;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3491 {
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3492 struct x_display_info *dpyinfo = x_display_info_for_display (dpy);
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3493
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3494 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
3495 {
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3496 Screen *screen = dpyinfo->screen;
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3497 int i;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3498
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3499 dpyinfo->ncolor_cells
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3500 = XDisplayCells (dpy, XScreenNumberOfScreen (screen));
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3501 dpyinfo->color_cells
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3502 = (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
3503 * sizeof *dpyinfo->color_cells);
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3504
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3505 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
3506 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
3507
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3508 XQueryColors (dpy, dpyinfo->cmap,
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3509 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
3510 }
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3511
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3512 *ncells = dpyinfo->ncolor_cells;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3513 return dpyinfo->color_cells;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3514 }
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3515
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3516
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3517 /* 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
3518 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
3519
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3520 void
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3521 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
3522 struct frame *f;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3523 XColor *colors;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3524 int ncolors;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3525 {
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3526 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
3527
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3528 if (dpyinfo->color_cells)
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3529 {
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3530 int i;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3531 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
3532 {
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3533 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
3534 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
3535 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
3536 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
3537 }
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3538 }
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3539 else
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3540 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
3541 }
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3542
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3543
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3544 /* 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
3545 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
3546
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3547 void
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3548 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
3549 struct frame *f;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3550 XColor *color;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3551 {
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3552 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
3553 }
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3554
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3555
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3556 /* Allocate the color COLOR->pixel on DISPLAY, colormap CMAP. If an
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3557 exact match can't be allocated, try the nearest color available.
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3558 Value is non-zero if successful. Set *COLOR to the color
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3559 allocated. */
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3560
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3561 static int
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3562 x_alloc_nearest_color_1 (dpy, cmap, color)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3563 Display *dpy;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3564 Colormap cmap;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3565 XColor *color;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3566 {
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3567 int rc;
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3568
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3569 rc = XAllocColor (dpy, cmap, color);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3570 if (rc == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3571 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3572 /* 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
3573 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
3574 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
3575 color matching with StaticColor visuals. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3576 int nearest, i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3577 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
3578 int ncells;
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3579 const XColor *cells = x_color_cells (dpy, &ncells);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3580
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3581 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
3582 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3583 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
3584 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
3585 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
3586 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
3587
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3588 if (delta < nearest_delta)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3589 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3590 nearest = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3591 nearest_delta = delta;
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 }
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 color->red = cells[nearest].red;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3596 color->green = cells[nearest].green;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3597 color->blue = cells[nearest].blue;
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3598 rc = XAllocColor (dpy, cmap, color);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3599 }
33062
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3600 else
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3601 {
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3602 /* 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
3603 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
3604 change in the colormap, so clear the color cache. */
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3605 struct x_display_info *dpyinfo = x_display_info_for_display (dpy);
33062
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3606 XColor *cached_color;
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3607
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3608 if (dpyinfo->color_cells
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3609 && (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
3610 (cached_color->red != color->red
9de33d895c6c (x_alloc_nearest_color): Fix last change to compare
Gerd Moellmann <gerd@gnu.org>
parents: 33062
diff changeset
3611 || cached_color->blue != color->blue
9de33d895c6c (x_alloc_nearest_color): Fix last change to compare
Gerd Moellmann <gerd@gnu.org>
parents: 33062
diff changeset
3612 || cached_color->green != color->green)))
33062
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3613 {
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3614 xfree (dpyinfo->color_cells);
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3615 dpyinfo->color_cells = NULL;
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3616 dpyinfo->ncolor_cells = 0;
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3617 }
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
3618 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3619
28356
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3620 #ifdef DEBUG_X_COLORS
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3621 if (rc)
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3622 register_color (color->pixel);
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3623 #endif /* DEBUG_X_COLORS */
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3624
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3625 return rc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3626 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3627
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3628
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3629 /* Allocate the color COLOR->pixel on frame F, colormap CMAP. If an
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3630 exact match can't be allocated, try the nearest color available.
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3631 Value is non-zero if successful. Set *COLOR to the color
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3632 allocated. */
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3633
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3634 int
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3635 x_alloc_nearest_color (f, cmap, color)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3636 struct frame *f;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3637 Colormap cmap;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3638 XColor *color;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3639 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3640 gamma_correct (f, color);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3641 return x_alloc_nearest_color_1 (FRAME_X_DISPLAY (f), cmap, color);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3642 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3643
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
3644
28356
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3645 /* 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
3646 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
3647 get color reference counts right. */
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3648
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3649 unsigned long
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3650 x_copy_color (f, pixel)
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3651 struct frame *f;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3652 unsigned long pixel;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3653 {
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3654 XColor color;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3655
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3656 color.pixel = pixel;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3657 BLOCK_INPUT;
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3658 x_query_color (f, &color);
28356
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3659 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
3660 UNBLOCK_INPUT;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3661 #ifdef DEBUG_X_COLORS
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3662 register_color (pixel);
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3663 #endif
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3664 return color.pixel;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3665 }
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3666
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3667
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3668 /* 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
3669 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
3670 get color reference counts right. */
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3671
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3672 unsigned long
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3673 x_copy_dpy_color (dpy, cmap, pixel)
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3674 Display *dpy;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3675 Colormap cmap;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3676 unsigned long pixel;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3677 {
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3678 XColor color;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3679
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3680 color.pixel = pixel;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3681 BLOCK_INPUT;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3682 XQueryColor (dpy, cmap, &color);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3683 XAllocColor (dpy, cmap, &color);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3684 UNBLOCK_INPUT;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3685 #ifdef DEBUG_X_COLORS
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3686 register_color (pixel);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3687 #endif
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3688 return color.pixel;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3689 }
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3690
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3691
33456
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
3692 /* 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
3693 boosted.
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
3694
33449
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3695 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
3696 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
3697 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
3698 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
3699 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
3700
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3701 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
3702 (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
3703 #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
3704
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3705
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3706 /* 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
3707 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
3708 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
3709 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
3710 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
3711 Value is non-zero if successful. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3712
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3713 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3714 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
3715 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3716 Display *display;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3717 Colormap cmap;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3718 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
3719 double factor;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3720 int delta;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3721 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3722 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
3723 long bright;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3724 int success_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3725
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3726 /* Get RGB color values. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3727 color.pixel = *pixel;
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
3728 x_query_color (f, &color);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3729
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3730 /* 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
3731 xassert (factor >= 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3732 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
3733 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
3734 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
3735
33456
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
3736 /* Calculate brightness of COLOR. */
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
3737 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
3738
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3739 /* 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
3740 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
3741 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
3742 /* 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
3743 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
3744 {
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3745 /* 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
3746 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
3747 /* The additive adjustment. */
33456
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
3748 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
3749
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3750 if (factor < 1)
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3751 {
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3752 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
3753 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
3754 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
3755 }
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3756 else
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3757 {
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3758 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
3759 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
3760 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
3761 }
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3762 }
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
3763
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3764 /* Try to allocate the color. */
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3765 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
3766 if (success_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3767 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3768 if (new.pixel == *pixel)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3769 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3770 /* 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
3771 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
3772 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
3773
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3774 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
3775 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
3776 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
3777 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
3778 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3779 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3780 success_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3781 *pixel = new.pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3782 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3783
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3784 return success_p;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3787
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3788 /* 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
3789 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
3790 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
3791 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
3792 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
3793 be allocated, use DEFAULT_PIXEL, instead. */
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 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3796 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
3797 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3798 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
3799 double factor;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3800 int delta;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3801 unsigned long default_pixel;
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 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3804 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
3805 unsigned long mask = GCForeground | GCLineWidth | GCGraphicsExposures;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3806 unsigned long pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3807 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
3808 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
3809 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
3810 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
3811
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3812 xgcv.graphics_exposures = False;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3813 xgcv.line_width = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3814
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3815 /* 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
3816 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
3817 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
3818 if (relief->gc
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3819 && relief->allocated_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3820 {
27962
048184bb751e (x_alloc_lighter_color, x_setup_relief_color): Use
Gerd Moellmann <gerd@gnu.org>
parents: 27857
diff changeset
3821 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
3822 relief->allocated_p = 0;
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 /* Allocate new color. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3826 xgcv.foreground = default_pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3827 pixel = background;
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
3828 if (dpyinfo->n_planes != 1
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
3829 && 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
3830 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3831 relief->allocated_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3832 xgcv.foreground = relief->pixel = pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3833 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3834
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3835 if (relief->gc == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3836 {
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
3837 xgcv.stipple = dpyinfo->gray;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3838 mask |= GCStipple;
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
3839 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
3840 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3841 else
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
3842 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
3843 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3844
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3845
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3846 /* 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
3847
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3848 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3849 x_setup_relief_colors (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3850 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3851 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3852 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
3853 unsigned long color;
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 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
3856 color = s->face->box_color;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3857 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3858 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3859 XGCValues xgcv;
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 /* 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
3862 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
3863 color = xgcv.background;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3864 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3865
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3866 if (di->white_relief.gc == 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3867 || color != di->relief_background)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3868 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3869 di->relief_background = color;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3870 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
3871 WHITE_PIX_DEFAULT (s->f));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3872 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
3873 BLACK_PIX_DEFAULT (s->f));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3874 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3875 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3876
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3877
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3878 /* 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
3879 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
3880 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
3881 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
3882 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
3883 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
3884 when drawing. */
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 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3887 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
3888 raised_p, left_p, right_p, clip_rect)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
3889 struct frame *f;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3890 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
3891 XRectangle *clip_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3892 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3893 int i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3894 GC gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3895
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3896 if (raised_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3897 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
3898 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3899 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
3900 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
3901
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3902 /* Top. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3903 for (i = 0; i < width; ++i)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3904 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
3905 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
3906 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
3907
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3908 /* Left. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3909 if (left_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3910 for (i = 0; i < width; ++i)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3911 XDrawLine (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), gc,
37033
fe7885cc9458 (x_draw_relief_rect): Extend left shadow to the
Gerd Moellmann <gerd@gnu.org>
parents: 37031
diff changeset
3912 left_x + i, top_y + i, left_x + i, bottom_y - i + 1);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3913
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3914 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
3915 if (raised_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3916 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
3917 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3918 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
3919 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
3920
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3921 /* Bottom. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3922 for (i = 0; i < width; ++i)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3923 XDrawLine (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), gc,
37033
fe7885cc9458 (x_draw_relief_rect): Extend left shadow to the
Gerd Moellmann <gerd@gnu.org>
parents: 37031
diff changeset
3924 left_x + i * left_p + 1, bottom_y - i,
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3925 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
3926
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3927 /* Right. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3928 if (right_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3929 for (i = 0; i < width; ++i)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3930 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
3931 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
3932
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3933 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
3934 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3935
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3936
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3937 /* 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
3938 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
3939 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
3940 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
3941 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
3942 rectangle to use when drawing. */
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 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3945 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
3946 left_p, right_p, clip_rect)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3947 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3948 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
3949 XRectangle *clip_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3950 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3951 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3952
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3953 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
3954 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
3955 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
3956
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3957 /* Top. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3958 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
3959 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
3960
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3961 /* Left. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3962 if (left_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3963 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
3964 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
3965
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3966 /* Bottom. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3967 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
3968 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
3969
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3970 /* Right. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3971 if (right_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3972 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
3973 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
3974
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3975 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
3976 XSetClipMask (s->display, s->gc, None);
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3979
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3980 /* 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
3981
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3982 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3983 x_draw_glyph_string_box (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3984 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3985 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3986 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
3987 int left_p, right_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3988 struct glyph *last_glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3989 XRectangle clip_rect;
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 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
3992 if (s->row->full_width_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3993 && !s->w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3994 {
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
3995 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
3996 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
3997 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
3998 }
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 /* 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
4001 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
4002 ? s->first_glyph
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4003 : s->first_glyph + s->nchars - 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4004
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
4005 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
4006 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
4007 left_x = s->x;
36795
e7722a221c28 (x_draw_glyph_string_box): Don't draw a full-width
Gerd Moellmann <gerd@gnu.org>
parents: 36776
diff changeset
4008 right_x = (s->row->full_width_p && s->extends_to_end_of_line_p
e7722a221c28 (x_draw_glyph_string_box): Don't draw a full-width
Gerd Moellmann <gerd@gnu.org>
parents: 36776
diff changeset
4009 ? last_x - 1
e7722a221c28 (x_draw_glyph_string_box): Don't draw a full-width
Gerd Moellmann <gerd@gnu.org>
parents: 36776
diff changeset
4010 : 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
4011 top_y = s->y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4012 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
4013
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4014 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
4015 || (s->hl == DRAW_MOUSE_FACE
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4016 && (s->prev == NULL
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4017 || s->prev->hl != s->hl)));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4018 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
4019 || (s->hl == DRAW_MOUSE_FACE
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4020 && (s->next == NULL
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4021 || s->next->hl != s->hl)));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4022
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4023 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
4024
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4025 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
4026 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
4027 left_p, right_p, &clip_rect);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4028 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4029 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4030 x_setup_relief_colors (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4031 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
4032 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
4033 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4034 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4035
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4036
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4037 /* Draw foreground of image glyph string S. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4038
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4039 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4040 x_draw_image_foreground (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4041 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4042 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4043 int x;
28785
796eafcfc070 (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 28686
diff changeset
4044 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
4045
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4046 /* 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
4047 right of that line. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4048 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
4049 && 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
4050 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
4051 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4052 x = s->x;
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 /* 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
4055 by that margin. */
35276
008aea836cbc (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 35272
diff changeset
4056 x += s->img->hmargin;
008aea836cbc (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 35272
diff changeset
4057 y += s->img->vmargin;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4058
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4059 if (s->img->pixmap)
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 if (s->img->mask)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4062 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4063 /* 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
4064 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
4065 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
4066 (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
4067 manually. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4068 unsigned long mask = (GCClipMask | GCClipXOrigin | GCClipYOrigin
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4069 | GCFunction);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4070 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4071 XRectangle clip_rect, image_rect, r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4072
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4073 xgcv.clip_mask = s->img->mask;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4074 xgcv.clip_x_origin = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4075 xgcv.clip_y_origin = y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4076 xgcv.function = GXcopy;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4077 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
4078
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4079 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
4080 image_rect.x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4081 image_rect.y = y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4082 image_rect.width = s->img->width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4083 image_rect.height = s->img->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4084 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
4085 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
4086 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
4087 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4088 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4089 {
30653
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
4090 unsigned long mask = GCClipXOrigin | GCClipYOrigin | GCFunction;
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
4091 XGCValues xgcv;
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
4092 XRectangle clip_rect, image_rect, r;
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
4093
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
4094 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
4095 image_rect.x = x;
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
4096 image_rect.y = y;
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
4097 image_rect.width = s->img->width;
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
4098 image_rect.height = s->img->height;
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
4099 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
4100 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
4101 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
4102
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4103 /* 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
4104 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
4105 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
4106 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
4107 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
4108 nothing here for mouse-face. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4109 if (s->hl == DRAW_CURSOR)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4110 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
4111 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
4112 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4113 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4114 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4115 /* 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
4116 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
4117 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
4118 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4119
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4120
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4121 /* 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
4122
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4123 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4124 x_draw_image_relief (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4125 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4126 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4127 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
4128 XRectangle r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4129 int x;
28785
796eafcfc070 (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 28686
diff changeset
4130 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
4131
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4132 /* 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
4133 right of that line. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4134 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
4135 && 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
4136 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
4137 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4138 x = s->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4139
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4140 /* 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
4141 by that margin. */
35276
008aea836cbc (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 35272
diff changeset
4142 x += s->img->hmargin;
008aea836cbc (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 35272
diff changeset
4143 y += s->img->vmargin;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4144
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4145 if (s->hl == DRAW_IMAGE_SUNKEN
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4146 || s->hl == DRAW_IMAGE_RAISED)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4147 {
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
4148 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
4149 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
4150 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4151 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4152 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4153 thick = abs (s->img->relief);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4154 raised_p = s->img->relief > 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4155 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4156
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4157 x0 = x - thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4158 y0 = y - thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4159 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
4160 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
4161
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4162 x_setup_relief_colors (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4163 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
4164 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
4165 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4166
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4167
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4168 /* 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
4169
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4170 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4171 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
4172 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4173 Pixmap pixmap;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4174 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4175 int x;
28785
796eafcfc070 (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 28686
diff changeset
4176 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
4177
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4178 /* 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
4179 right of that line. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4180 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
4181 && 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
4182 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
4183 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4184 x = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4185
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4186 /* 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
4187 by that margin. */
35276
008aea836cbc (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 35272
diff changeset
4188 x += s->img->hmargin;
008aea836cbc (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 35272
diff changeset
4189 y += s->img->vmargin;
24991
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 if (s->img->pixmap)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4192 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4193 if (s->img->mask)
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 /* 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
4196 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
4197 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
4198 (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
4199 manually. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4200 unsigned long mask = (GCClipMask | GCClipXOrigin | GCClipYOrigin
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4201 | GCFunction);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4202 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4203
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4204 xgcv.clip_mask = s->img->mask;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4205 xgcv.clip_x_origin = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4206 xgcv.clip_y_origin = y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4207 xgcv.function = GXcopy;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4208 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
4209
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4210 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
4211 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
4212 XSetClipMask (s->display, s->gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4213 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4214 else
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 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
4217 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
4218
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4219 /* 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
4220 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
4221 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
4222 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
4223 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
4224 nothing here for mouse-face. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4225 if (s->hl == DRAW_CURSOR)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4226 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
4227 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
4228 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4229 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4230 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4231 /* 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
4232 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
4233 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
4234 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4235
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4236
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4237 /* 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
4238 give the rectangle to draw. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4239
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4240 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4241 x_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
4242 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4243 int x, y, w, h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4244 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4245 if (s->stippled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4246 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4247 /* Fill background with a stipple pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4248 XSetFillStyle (s->display, s->gc, FillOpaqueStippled);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4249 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
4250 XSetFillStyle (s->display, s->gc, FillSolid);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4251 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4252 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4253 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
4254 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4255
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4256
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4257 /* Draw image glyph string S.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4258
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4259 s->y
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4260 s->x +-------------------------
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4261 | s->face->box
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4262 |
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4263 | +-------------------------
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4264 | | s->img->margin
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4265 | |
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 | | | the image
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4268
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4269 */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4270
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4271 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4272 x_draw_image_glyph_string (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4273 struct glyph_string *s;
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 int x, y;
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
4276 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
4277 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
4278 int height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4279 Pixmap pixmap = None;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4280
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
4281 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
4282
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4283 /* 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
4284 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
4285 flickering. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4286 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
4287 if (height > s->img->height
35276
008aea836cbc (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 35272
diff changeset
4288 || s->img->hmargin
008aea836cbc (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 35272
diff changeset
4289 || s->img->vmargin
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4290 || s->img->mask
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4291 || s->img->pixmap == 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4292 || s->width != s->background_width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4293 {
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
4294 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
4295 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
4296 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4297 x = s->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4298
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
4299 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
4300
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4301 if (s->img->mask)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4302 {
31694
97c48afc4c5a (x_draw_image_glyph_string): Remove a comment describing
Gerd Moellmann <gerd@gnu.org>
parents: 31614
diff changeset
4303 /* 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
4304 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
4305 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
4306 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
4307 int depth = DefaultDepthOfScreen (screen);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4308
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4309 /* 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
4310 pixmap = XCreatePixmap (s->display, s->window,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4311 s->background_width,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4312 s->height, depth);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4313
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4314 /* 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
4315 pixmap. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4316 XSetClipMask (s->display, s->gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4317
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4318 /* 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
4319 if (s->stippled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4320 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4321 /* Fill background with a stipple pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4322 XSetFillStyle (s->display, s->gc, FillOpaqueStippled);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4323 XFillRectangle (s->display, pixmap, s->gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4324 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
4325 XSetFillStyle (s->display, s->gc, FillSolid);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4326 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4327 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4328 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4329 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4330 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
4331 &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4332 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
4333 XFillRectangle (s->display, pixmap, s->gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4334 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
4335 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
4336 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4337 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4338 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4339 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
4340
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4341 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4342 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4343
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4344 /* Draw the foreground. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4345 if (pixmap != None)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4346 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4347 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
4348 x_set_glyph_string_clipping (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4349 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
4350 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
4351 XFreePixmap (s->display, pixmap);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4352 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4353 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4354 x_draw_image_foreground (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4355
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4356 /* 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
4357 if (s->img->relief
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4358 || s->hl == DRAW_IMAGE_RAISED
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4359 || s->hl == DRAW_IMAGE_SUNKEN)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4360 x_draw_image_relief (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4361 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4362
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4363
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4364 /* Draw stretch glyph string S. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4365
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4366 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4367 x_draw_stretch_glyph_string (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4368 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4369 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4370 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
4371 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
4372
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4373 if (s->hl == DRAW_CURSOR
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4374 && !x_stretch_cursor_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4375 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4376 /* 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
4377 as wide as the stretch glyph. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4378 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
4379
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4380 /* Draw cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4381 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
4382
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4383 /* 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
4384 if (width < s->background_width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4385 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4386 GC gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4387 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
4388 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
4389 XRectangle r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4390
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4391 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
4392 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
4393
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4394 if (s->face->stipple)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4395 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4396 /* Fill background with a stipple pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4397 XSetFillStyle (s->display, gc, FillOpaqueStippled);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4398 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
4399 XSetFillStyle (s->display, gc, FillSolid);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4400 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4401 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4402 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4403 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4404 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
4405 XSetForeground (s->display, gc, xgcv.background);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4406 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
4407 XSetForeground (s->display, gc, xgcv.foreground);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4408 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4409 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4410 }
37535
6c6b5bd0f257 (x_draw_stretch_glyph_string): Don't draw background
Gerd Moellmann <gerd@gnu.org>
parents: 37525
diff changeset
4411 else if (!s->background_filled_p)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4412 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
4413 s->height);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4414
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4415 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4416 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4417
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4418
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4419 /* Draw glyph string S. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4420
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4421 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4422 x_draw_glyph_string (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4423 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4424 {
36800
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
4425 int relief_drawn_p = 0;
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
4426
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4427 /* 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
4428 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
4429 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
4430 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
4431 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4432 xassert (s->next->img == NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4433 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
4434 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
4435 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
4436 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4437
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4438 /* 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
4439 x_set_glyph_string_gc (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4440 x_set_glyph_string_clipping (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4441
36800
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
4442 /* Draw relief (if any) in advance for char/composition so that the
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
4443 glyph string can be drawn over it. */
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
4444 if (!s->for_overlaps_p
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
4445 && s->face->box != FACE_NO_BOX
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
4446 && (s->first_glyph->type == CHAR_GLYPH
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
4447 || s->first_glyph->type == COMPOSITE_GLYPH))
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
4448
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
4449 {
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
4450 x_draw_glyph_string_background (s, 1);
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
4451 x_draw_glyph_string_box (s);
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
4452 relief_drawn_p = 1;
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
4453 }
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
4454
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4455 switch (s->first_glyph->type)
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 case IMAGE_GLYPH:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4458 x_draw_image_glyph_string (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4459 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4460
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4461 case STRETCH_GLYPH:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4462 x_draw_stretch_glyph_string (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4463 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4464
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4465 case CHAR_GLYPH:
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4466 if (s->for_overlaps_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4467 s->background_filled_p = 1;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4468 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4469 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
4470 x_draw_glyph_string_foreground (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4471 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4472
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4473 case COMPOSITE_GLYPH:
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4474 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
4475 s->background_filled_p = 1;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4476 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4477 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
4478 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
4479 break;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4480
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4481 default:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4482 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4483 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4484
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4485 if (!s->for_overlaps_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4486 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4487 /* Draw underline. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4488 if (s->face->underline_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4489 {
32945
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4490 unsigned long tem, h;
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4491 int y;
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4492
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4493 /* 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
4494 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
4495 h = 1;
32945
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4496
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4497 /* 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
4498 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
4499 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
4500 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
4501
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4502 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
4503 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
4504
37153
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
4505 if (x_use_underline_position_properties
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
4506 && XGetFontProperty (s->font, XA_UNDERLINE_POSITION, &tem))
32945
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
4507 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
4508 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
4509 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
4510 else
37031
5cb404651755 (expose_window_tree, expose_frame): Don't compute
Gerd Moellmann <gerd@gnu.org>
parents: 36948
diff changeset
4511 y = s->y + s->height - h;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4512
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4513 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
4514 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
4515 s->x, y, s->width, h);
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4516 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4517 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4518 XGCValues xgcv;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4519 XGetGCValues (s->display, s->gc, GCForeground, &xgcv);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4520 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
4521 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
4522 s->x, y, s->width, h);
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4523 XSetForeground (s->display, s->gc, xgcv.foreground);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4524 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4525 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4526
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4527 /* Draw overline. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4528 if (s->face->overline_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4529 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4530 unsigned long dy = 0, h = 1;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4531
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4532 if (s->face->overline_color_defaulted_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4533 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
4534 s->width, h);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4535 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4536 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4537 XGCValues xgcv;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4538 XGetGCValues (s->display, s->gc, GCForeground, &xgcv);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4539 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
4540 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
4541 s->width, h);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4542 XSetForeground (s->display, s->gc, xgcv.foreground);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4543 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4544 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4545
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4546 /* Draw strike-through. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4547 if (s->face->strike_through_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4548 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4549 unsigned long h = 1;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4550 unsigned long dy = (s->height - h) / 2;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4551
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4552 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
4553 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
4554 s->width, h);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4555 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4556 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4557 XGCValues xgcv;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4558 XGetGCValues (s->display, s->gc, GCForeground, &xgcv);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4559 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
4560 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
4561 s->width, h);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4562 XSetForeground (s->display, s->gc, xgcv.foreground);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4563 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4564 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4565
36800
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
4566 /* Draw relief if not yet drawn. */
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
4567 if (!relief_drawn_p && s->face->box != FACE_NO_BOX)
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4568 x_draw_glyph_string_box (s);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4569 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4570
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4571 /* Reset clipping. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4572 XSetClipMask (s->display, s->gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4573 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4574
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4575
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4576 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
4577 struct face **, int));
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4578
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4579
30137
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4580 /* 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
4581
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4582 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
4583 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
4584 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
4585 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
4586
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4587 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
4588
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4589 static int
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4590 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
4591 struct glyph_string *s;
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4592 struct face **faces;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4593 int overlaps_p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4594 {
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4595 int i;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4596
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4597 xassert (s);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4598
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4599 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
4600
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4601 s->face = faces[s->gidx];
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4602 s->font = s->face->font;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4603 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
4604
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4605 /* 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
4606 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
4607 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
4608 ++s->nchars;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4609 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
4610 ++s->nchars;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4611
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4612 /* 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
4613 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
4614
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4615 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
4616
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4617 /* 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
4618 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
4619 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
4620 characters of the glyph string. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4621 if (s->font == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4622 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4623 s->font_not_found_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4624 s->font = FRAME_FONT (s->f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4625 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4626
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4627 /* 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
4628 s->ybase += s->first_glyph->voffset;
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 xassert (s->face && s->face->gc);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4631
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4632 /* 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
4633 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
4634
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4635 return s->gidx + s->nchars;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4636 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4637
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4638
30137
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4639 /* 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
4640
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4641 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
4642 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
4643 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
4644 use its physical height for clipping.
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4645
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4646 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
4647
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4648 static int
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4649 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
4650 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4651 int face_id;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4652 int start, end, overlaps_p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4653 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4654 struct glyph *glyph, *last;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4655 int voffset;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4656 int glyph_not_available_p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4657
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4658 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
4659 xassert (s->nchars == 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4660 xassert (start >= 0 && end > start);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4661
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4662 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
4663 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
4664 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
4665 voffset = glyph->voffset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4666
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4667 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
4668
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4669 while (glyph < last
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4670 && glyph->type == CHAR_GLYPH
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4671 && glyph->voffset == voffset
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4672 /* Same face id implies same font, nowadays. */
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4673 && glyph->face_id == face_id
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4674 && 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
4675 {
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4676 int two_byte_p;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4677
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4678 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
4679 s->char2b + s->nchars,
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4680 &two_byte_p);
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4681 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
4682 ++s->nchars;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4683 xassert (s->nchars <= end - start);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4684 s->width += glyph->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4685 ++glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4686 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4687
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4688 s->font = s->face->font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4689 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
4690
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4691 /* 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
4692 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
4693 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
4694 characters of the glyph string. */
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4695 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
4696 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4697 s->font_not_found_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4698 s->font = FRAME_FONT (s->f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4699 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4700
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4701 /* 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
4702 s->ybase += voffset;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4703
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4704 xassert (s->face && s->face->gc);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4705 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
4706 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4707
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4708
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4709 /* 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
4710
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4711 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4712 x_fill_image_glyph_string (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4713 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4714 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4715 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
4716 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
4717 xassert (s->img);
27000
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
4718 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
4719 s->font = s->face->font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4720 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
4721
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4722 /* 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
4723 s->ybase += s->first_glyph->voffset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4724 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4725
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4726
30137
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4727 /* 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
4728
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4729 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
4730 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
4731 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
4732
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4733 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
4734
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4735 static int
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4736 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
4737 struct glyph_string *s;
30137
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4738 struct glyph_row *row;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4739 enum glyph_row_area area;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4740 int start, end;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4741 {
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4742 struct glyph *glyph, *last;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4743 int voffset, face_id;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4744
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4745 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
4746
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4747 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
4748 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
4749 face_id = glyph->face_id;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4750 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
4751 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
4752 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
4753 s->width = glyph->pixel_width;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4754 voffset = glyph->voffset;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4755
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4756 for (++glyph;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4757 (glyph < last
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4758 && glyph->type == STRETCH_GLYPH
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4759 && glyph->voffset == voffset
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4760 && glyph->face_id == face_id);
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4761 ++glyph)
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4762 s->width += glyph->pixel_width;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4763
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4764 /* 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
4765 s->ybase += voffset;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4766
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4767 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
4768 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
4769 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4770
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4771
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4772 /* 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
4773 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
4774 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
4775 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
4776 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
4777 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
4778 face-override for drawing S. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4779
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4780 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4781 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
4782 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4783 XChar2b *char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4784 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4785 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4786 enum glyph_row_area area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4787 int start;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4788 enum draw_glyphs_face hl;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4789 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4790 bzero (s, sizeof *s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4791 s->w = w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4792 s->f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4793 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
4794 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
4795 s->char2b = char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4796 s->hl = hl;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4797 s->row = row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4798 s->area = area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4799 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
4800 s->height = row->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4801 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
4802
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
4803 /* 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
4804 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
4805 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
4806
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4807 s->ybase = s->y + row->ascent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4808 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4809
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4810
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4811 /* 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
4812 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
4813 in the drawing area. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4814
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4815 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4816 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
4817 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4818 int start;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4819 int last_x;
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 /* 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
4822 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
4823 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
4824
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4825 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
4826 && s->hl == DRAW_NORMAL_TEXT
36117
776ddfaf7665 (x_set_glyph_string_background_width): Extend the
Gerd Moellmann <gerd@gnu.org>
parents: 36116
diff changeset
4827 && s->area == TEXT_AREA
776ddfaf7665 (x_set_glyph_string_background_width): Extend the
Gerd Moellmann <gerd@gnu.org>
parents: 36116
diff changeset
4828 && (s->row->fill_line_p
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4829 || s->face->background != default_face->background
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4830 || s->face->stipple != default_face->stipple))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4831 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
4832
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4833 /* 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
4834 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
4835 area. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4836 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
4837 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
4838 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4839 s->background_width = s->width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4840 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4841
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4842
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4843 /* 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
4844 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
4845 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
4846 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
4847 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
4848 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
4849 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
4850
25692
121bd925411f Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents: 25682
diff changeset
4851 /* 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
4852 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
4853 #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
4854 do \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4855 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4856 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
4857 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
4858 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
4859 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
4860 s->x = (X); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4861 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4862 while (0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4863
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4864
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4865 /* 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
4866 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
4867 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
4868 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
4869 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
4870 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
4871 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
4872
25692
121bd925411f Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents: 25682
diff changeset
4873 #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
4874 do \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4875 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4876 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
4877 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
4878 x_fill_image_glyph_string (s); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4879 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
4880 ++START; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4881 s->x = (X); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4882 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4883 while (0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4884
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4885
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4886 /* 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
4887 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
4888 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
4889 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
4890 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
4891 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
4892 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
4893 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
4894
25692
121bd925411f Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents: 25682
diff changeset
4895 #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
4896 do \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4897 { \
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
4898 int c, face_id; \
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4899 XChar2b *char2b; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4900 \
27000
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
4901 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
4902 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
4903 \
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4904 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
4905 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
4906 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
4907 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
4908 s->x = (X); \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4909 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
4910 OVERLAPS_P); \
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4911 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4912 while (0)
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
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4915 /* 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
4916 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
4917 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
4918 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
4919 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
4920 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
4921 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
4922 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
4923
26912
3470e4fea708 (BUILD_GLYPH_STRINGS): For pcc, remove continuation in arg list.
Dave Love <fx@gnu.org>
parents: 26879
diff changeset
4924 #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
4925 do { \
27000
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
4926 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
4927 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
4928 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
4929 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
4930 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
4931 XChar2b *char2b; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4932 struct face **faces; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4933 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
4934 int n; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4935 \
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4936 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
4937 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
4938 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
4939 /* 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
4940 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
4941 { \
27000
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
4942 int c = COMPOSITION_GLYPH (cmp, n); \
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4943 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
4944 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
4945 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
4946 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
4947 } \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4948 \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4949 /* 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
4950 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
4951 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
4952 { \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4953 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
4954 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
4955 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
4956 s->cmp = cmp; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4957 s->gidx = n; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4958 s->x = (X); \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4959 \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4960 if (n == 0) \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4961 first_s = s; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4962 \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4963 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
4964 } \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4965 \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4966 ++START; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4967 s = first_s; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4968 } while (0)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4969
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4970
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4971 /* 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
4972 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
4973 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
4974 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
4975 x-positions of the drawing area.
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 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
4978 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
4979 asynchronously). */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4980
25692
121bd925411f Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents: 25682
diff changeset
4981 #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
4982 do \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4983 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4984 HEAD = TAIL = NULL; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4985 while (START < END) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4986 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4987 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
4988 switch (first_glyph->type) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4989 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4990 case CHAR_GLYPH: \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4991 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
4992 TAIL, HL, X, LAST_X, \
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4993 OVERLAPS_P); \
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4994 break; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4995 \
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4996 case COMPOSITE_GLYPH: \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4997 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
4998 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
4999 OVERLAPS_P); \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
5000 break; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
5001 \
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5002 case STRETCH_GLYPH: \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5003 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
5004 HEAD, TAIL, HL, X, LAST_X); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5005 break; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5006 \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5007 case IMAGE_GLYPH: \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5008 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
5009 TAIL, HL, X, LAST_X); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5010 break; \
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 default: \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5013 abort (); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5014 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5015 \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5016 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
5017 (X) += s->width; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5018 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5019 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5020 while (0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5021
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 /* 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
5024 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
5025 face-override with the following meaning:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5026
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5027 DRAW_NORMAL_TEXT draw normally
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5028 DRAW_CURSOR draw in cursor face
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5029 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
5030 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
5031 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
5032 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
5033
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5034 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
5035 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
5036 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
5037 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
5038 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
5039
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5040 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
5041 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
5042
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5043 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
5044
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5045 static int
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5046 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
5047 overlaps_p)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5048 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5049 int x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5050 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5051 enum glyph_row_area area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5052 int start, end;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5053 enum draw_glyphs_face hl;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5054 int *real_start, *real_end;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5055 int overlaps_p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5056 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5057 struct glyph_string *head, *tail;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5058 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5059 int last_x, area_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5060 int x_reached;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5061 int i, j;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5062
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5063 /* 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
5064 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
5065 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
5066 start = min (end, start);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5067 if (real_start)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5068 *real_start = start;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5069 if (real_end)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5070 *real_end = end;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5071
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5072 /* 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
5073 end of the drawing area. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5074 if (row->full_width_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5075 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5076 /* 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
5077 or flag areas. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5078 struct frame *f = XFRAME (w->frame);
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
5079 /* 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
5080 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
5081
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5082 x += window_left_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5083 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
5084 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
5085
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5086 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
5087 {
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
5088 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
5089 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
5090 last_x += width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5091 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5092 x -= width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5093 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5094
25083
d3b7d7d2bca8 (x_setup_relief_color): Don't try smart color allocation
Gerd Moellmann <gerd@gnu.org>
parents: 25079
diff changeset
5095 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
5096 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
5097 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5098 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5099 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5100 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
5101 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
5102 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
5103 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5104
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5105 /* 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
5106 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
5107 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
5108 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
5109 i = start;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5110 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
5111 overlaps_p);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5112 if (tail)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5113 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
5114 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5115 x_reached = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5116
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5117 /* 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
5118 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
5119 strings built above. */
31489
8bfcf0b562f2 (x_draw_glyphs): Handle case START and END are out
Gerd Moellmann <gerd@gnu.org>
parents: 31340
diff changeset
5120 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
5121 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5122 int dummy_x = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5123 struct glyph_string *h, *t;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5124
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5125 /* Compute overhangs for all glyph strings. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5126 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
5127 x_compute_glyph_string_overhangs (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5128
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5129 /* 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
5130 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
5131 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
5132 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
5133 draws over it. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5134 i = x_left_overwritten (head);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5135 if (i >= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5136 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5137 j = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5138 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
5139 DRAW_NORMAL_TEXT, dummy_x, last_x,
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5140 overlaps_p);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5141 start = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5142 if (real_start)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5143 *real_start = start;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5144 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
5145 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
5146 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5147
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5148 /* 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
5149 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
5150 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
5151 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
5152 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
5153 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
5154 strings exist. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5155 i = x_left_overwriting (head);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5156 if (i >= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5157 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5158 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
5159 DRAW_NORMAL_TEXT, dummy_x, last_x,
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5160 overlaps_p);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5161 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
5162 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5163 if (real_start)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5164 *real_start = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5165 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
5166 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
5167 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5168
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5169 /* 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
5170 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
5171 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
5172 over it. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5173 i = x_right_overwritten (tail);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5174 if (i >= 0)
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 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
5177 DRAW_NORMAL_TEXT, x, last_x,
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5178 overlaps_p);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5179 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
5180 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
5181 if (real_end)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5182 *real_end = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5183 }
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 /* 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
5186 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
5187 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
5188 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
5189 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
5190 i = x_right_overwriting (tail);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5191 if (i >= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5192 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5193 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
5194 DRAW_NORMAL_TEXT, x, last_x,
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5195 overlaps_p);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5196 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
5197 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5198 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
5199 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
5200 if (real_end)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5201 *real_end = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5202 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5203 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5204
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5205 /* Draw all strings. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5206 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
5207 x_draw_glyph_string (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5208
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5209 /* 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
5210 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
5211 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
5212 if (!row->full_width_p)
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 if (area > LEFT_MARGIN_AREA)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5215 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
5216 if (area > TEXT_AREA)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5217 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
5218 }
31489
8bfcf0b562f2 (x_draw_glyphs): Handle case START and END are out
Gerd Moellmann <gerd@gnu.org>
parents: 31340
diff changeset
5219
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5220 return x_reached;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5223
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5224 /* 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
5225
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5226 static void
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5227 x_fix_overlapping_area (w, row, area)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5228 struct window *w;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5229 struct glyph_row *row;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5230 enum glyph_row_area area;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5231 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5232 int i, x;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5233
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5234 BLOCK_INPUT;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5235
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5236 if (area == LEFT_MARGIN_AREA)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5237 x = 0;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5238 else if (area == TEXT_AREA)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5239 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
5240 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5241 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
5242 + window_box_width (w, TEXT_AREA));
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5243
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5244 for (i = 0; i < row->used[area];)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5245 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5246 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
5247 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5248 int start = i, start_x = x;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5249
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5250 do
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5251 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5252 x += row->glyphs[area][i].pixel_width;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5253 ++i;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5254 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5255 while (i < row->used[area]
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5256 && row->glyphs[area][i].overlaps_vertically_p);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5257
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5258 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
5259 (row->inverse_p
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5260 ? DRAW_INVERSE_VIDEO : DRAW_NORMAL_TEXT),
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5261 NULL, NULL, 1);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5262 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5263 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5264 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5265 x += row->glyphs[area][i].pixel_width;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5266 ++i;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5267 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5268 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5269
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5270 UNBLOCK_INPUT;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5271 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5272
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5273
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5274 /* 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
5275 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
5276 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
5277 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
5278 row being updated. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5279
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5280 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5281 x_write_glyphs (start, len)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5282 struct glyph *start;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5283 int len;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5284 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5285 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
5286
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5287 xassert (updated_window && updated_row);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5288 BLOCK_INPUT;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5289
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5290 /* Write glyphs. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5291
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5292 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
5293 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
5294 updated_row, updated_area,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5295 hpos, hpos + len,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5296 (updated_row->inverse_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5297 ? DRAW_INVERSE_VIDEO : DRAW_NORMAL_TEXT),
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
5298 &real_start, &real_end, 0);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5299
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5300 /* 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
5301 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
5302 real_end - real_start);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5303
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5304 UNBLOCK_INPUT;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5305
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5306 /* Advance the output cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5307 output_cursor.hpos += len;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5308 output_cursor.x = x;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5311
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5312 /* 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
5313
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5314 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5315 x_insert_glyphs (start, len)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5316 struct glyph *start;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5317 register int len;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5318 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5319 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5320 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5321 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
5322 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5323 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5324 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
5325
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5326 xassert (updated_window && updated_row);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5327 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5328 w = updated_window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5329 f = XFRAME (WINDOW_FRAME (w));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5330
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5331 /* 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
5332 row = updated_row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5333 line_height = row->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5334
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5335 /* 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
5336 shift_by_width = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5337 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
5338 shift_by_width += glyph->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5339
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5340 /* 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
5341 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
5342 - output_cursor.x
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5343 - shift_by_width);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5344
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5345 /* Shift right. */
36116
68c02499d990 (x_insert_glyphs): Call window_box_left to obtain
Gerd Moellmann <gerd@gnu.org>
parents: 36005
diff changeset
5346 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
5347 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
5348 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
5349 f->output_data.x->normal_gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5350 frame_x, frame_y,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5351 shifted_region_width, line_height,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5352 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
5353
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5354 /* Write the glyphs. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5355 hpos = start - row->glyphs[updated_area];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5356 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
5357 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
5358 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
5359
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5360 /* Advance the output cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5361 output_cursor.hpos += len;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5362 output_cursor.x += shift_by_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5363 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5364 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5365
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5366
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5367 /* 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
5368 for X frames. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5369
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5370 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5371 x_delete_glyphs (n)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5372 register int n;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5373 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5374 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5375 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5376
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5377
35581
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5378 /* 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
5379 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
5380
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5381 void
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5382 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
5383 Display *dpy;
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5384 Window window;
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5385 int x, y;
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5386 int width, height;
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5387 int exposures;
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5388 {
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5389 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
5390 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
5391 }
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5392
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5393
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5394 /* 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
5395 (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
5396 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
5397
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5398 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
5399 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
5400
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5401 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5402 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
5403 int to_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5404 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5405 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5406 struct window *w = updated_window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5407 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
5408 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
5409
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5410 xassert (updated_window && updated_row);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5411 f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5412
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5413 if (updated_row->full_width_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5414 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5415 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
5416 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
5417 && !w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5418 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
5419 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5420 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5421 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
5422 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
5423
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5424 /* 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
5425 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
5426 if (to_x == 0)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5427 return;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5428 else if (to_x < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5429 to_x = max_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5430 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5431 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
5432
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5433 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
5434
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
5435 /* 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
5436 if (!updated_row->full_width_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5437 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
5438
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5439 from_x = output_cursor.x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5440
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5441 /* Translate to frame coordinates. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5442 if (updated_row->full_width_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5443 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5444 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
5445 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
5446 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5447 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5448 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5449 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
5450 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
5451 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5452
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
5453 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
5454 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
5455 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
5456
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5457 /* 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
5458 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
5459 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5460 BLOCK_INPUT;
35581
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5461 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
5462 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
5463 False);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5464 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5465 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5466 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5467
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5468
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5469 /* 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
5470 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
5471
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5472 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5473 x_clear_frame ()
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5474 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5475 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5476
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5477 if (updating_frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5478 f = updating_frame;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5479 else
25682
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5480 f = SELECTED_FRAME ();
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5481
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5482 /* 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
5483 longer visible. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5484 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
5485 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
5486 output_cursor.x = -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5487
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5488 /* 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
5489 follow an explicit cursor_to. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5490 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
5491 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
5492
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5493 /* 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
5494 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
5495 x_scroll_bar_clear (f);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5496
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
5497 XFlush (FRAME_X_DISPLAY (f));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5498 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5499 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5500
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5501
6791
7036e4fd549f (dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents: 6767
diff changeset
5502
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5503 /* 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
5504
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5505 /* 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
5506 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
5507
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5508 #if defined (HAVE_TIMEVAL) && defined (HAVE_SELECT)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5509
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5510
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5511 /* 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
5512 *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
5513
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5514 static int
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5515 timeval_subtract (result, x, y)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5516 struct timeval *result, x, y;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5517 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5518 /* 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
5519 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
5520 if (x.tv_usec < y.tv_usec)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5521 {
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5522 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
5523 y.tv_usec -= 1000000 * nsec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5524 y.tv_sec += nsec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5525 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5526
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5527 if (x.tv_usec - y.tv_usec > 1000000)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5528 {
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5529 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
5530 y.tv_usec += 1000000 * nsec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5531 y.tv_sec -= nsec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5532 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5533
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5534 /* 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
5535 positive. */
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5536 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
5537 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
5538
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5539 /* 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
5540 negative. */
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5541 return x.tv_sec < y.tv_sec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5542 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5543
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
5544 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5545 XTflash (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5546 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5547 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5548 BLOCK_INPUT;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5549
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5550 {
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5551 GC gc;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5552
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5553 /* 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
5554 pixels into background pixels. */
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5555 {
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5556 XGCValues values;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5557
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5558 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
5559 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
5560 ^ f->output_data.x->background_pixel);
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
5561
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
5562 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
5563 GCFunction | GCForeground, &values);
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5564 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5565
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5566 {
16352
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5567 /* 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
5568 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
5569 /* 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
5570 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
5571 /* 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
5572 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
5573 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
5574
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5575 int width;
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5576
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5577 /* 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
5578 edge it is next to. */
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5579 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
5580 {
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5581 case vertical_scroll_bar_left:
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5582 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
5583 break;
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5584
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5585 case vertical_scroll_bar_right:
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5586 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
5587 break;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5588
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5589 default:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5590 break;
16352
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5591 }
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5592
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5593 width = flash_right - flash_left;
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5594
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5595 /* 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
5596 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
5597 {
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5598 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
5599 flash_left,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5600 (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
5601 + 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
5602 width, flash_height);
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5603 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
5604 flash_left,
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5605 (height - flash_height
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5606 - FRAME_INTERNAL_BORDER_WIDTH (f)),
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5607 width, flash_height);
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5608 }
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5609 else
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5610 /* 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
5611 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
5612 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
5613 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
5614
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5615 x_flush (f);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5616
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5617 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5618 struct timeval wakeup;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5619
5362
d1fa597d923d (XTflush): FIx typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 5357
diff changeset
5620 EMACS_GET_TIME (wakeup);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5621
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5622 /* 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
5623 wakeup.tv_usec += 150000;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5624 wakeup.tv_sec += (wakeup.tv_usec / 1000000);
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5625 wakeup.tv_usec %= 1000000;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5626
36599
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
5627 /* Keep waiting until past the time wakeup or any input gets
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
5628 available. */
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
5629 while (! detect_input_pending ())
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5630 {
36599
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
5631 struct timeval current;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5632 struct timeval timeout;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5633
36599
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
5634 EMACS_GET_TIME (current);
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
5635
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
5636 /* Break if result would be negative. */
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
5637 if (timeval_subtract (&current, wakeup, current))
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5638 break;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5639
36599
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
5640 /* How long `select' should wait. */
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
5641 timeout.tv_sec = 0;
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
5642 timeout.tv_usec = 10000;
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
5643
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5644 /* 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
5645 select (0, NULL, NULL, NULL, &timeout);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5646 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5647 }
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
5648
16352
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5649 /* 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
5650 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
5651 {
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5652 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
5653 flash_left,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5654 (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
5655 + 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
5656 width, flash_height);
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5657 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
5658 flash_left,
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5659 (height - flash_height
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5660 - FRAME_INTERNAL_BORDER_WIDTH (f)),
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5661 width, flash_height);
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5662 }
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5663 else
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5664 /* 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
5665 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
5666 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
5667 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
5668
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
5669 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
5670 x_flush (f);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5671 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5672 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5673
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5674 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5675 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5676
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5677 #endif /* defined (HAVE_TIMEVAL) && defined (HAVE_SELECT) */
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5678
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5679
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5680 /* Make audible bell. */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5681
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
5682 void
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5683 XTring_bell ()
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5684 {
25682
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5685 struct frame *f = SELECTED_FRAME ();
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5686
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5687 if (FRAME_X_DISPLAY (f))
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5688 {
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5689 #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
5690 if (visible_bell)
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5691 XTflash (f);
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5692 else
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5693 #endif
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5694 {
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5695 BLOCK_INPUT;
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5696 XBell (FRAME_X_DISPLAY (f), 0);
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5697 XFlush (FRAME_X_DISPLAY (f));
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5698 UNBLOCK_INPUT;
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5699 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5700 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5701 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5702
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5703
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5704 /* Specify how many text lines, from the top of the window,
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5705 should be affected by insert-lines and delete-lines operations.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5706 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
5707 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
5708
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
5709 static void
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5710 XTset_terminal_window (n)
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5711 register int n;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5712 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5713 /* This function intentionally left blank. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5714 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5715
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5716
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5717
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5718 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5719 Line Dance
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5720 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5721
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5722 /* 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
5723 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
5724
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5725 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5726 x_ins_del_lines (vpos, n)
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
5727 int vpos, n;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5728 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5729 abort ();
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5733 /* 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
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 x_scroll_run (w, run)
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 run *run;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5739 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5740 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5741 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
5742
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5743 /* 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
5744 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
5745 left and right of W. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5746 window_box (w, -1, &x, &y, &width, &height);
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
5747 width += FRAME_X_FLAGS_AREA_WIDTH (f);
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
5748 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
5749
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5750 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
5751 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
5752 bottom_y = y + height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5753
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5754 if (to_y < from_y)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5755 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5756 /* 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
5757 line at the bottom. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5758 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
5759 height = bottom_y - from_y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5760 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5761 height = run->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5762 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5763 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5764 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5765 /* 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
5766 at the bottom. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5767 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
5768 height = bottom_y - to_y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5769 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5770 height = run->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5771 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5772
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5773 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5774
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5775 /* 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
5776 updated_window = w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5777 x_clear_cursor (w);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5778
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5779 XCopyArea (FRAME_X_DISPLAY (f),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5780 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
5781 f->output_data.x->normal_gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5782 x, from_y,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5783 width, height,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5784 x, to_y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5785
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5786 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5787 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5788
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5789
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5790
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5791 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5792 Exposure Events
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 /* 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
5796 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
5797 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
5798 the entire frame. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5799
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5800 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5801 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
5802 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5803 int x, y, w, h;
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 XRectangle r;
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 TRACE ((stderr, "expose_frame "));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5808
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5809 /* 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
5810 if (FRAME_GARBAGED_P (f))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5811 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5812 TRACE ((stderr, " garbaged\n"));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5813 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5814 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5815
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5816 /* 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
5817 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
5818 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
5819 if (FRAME_FACE_CACHE (f) == NULL
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5820 || 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
5821 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5822 TRACE ((stderr, " no faces\n"));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5823 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5824 }
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 if (w == 0 || h == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5827 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5828 r.x = r.y = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5829 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
5830 r.height = CANON_Y_UNIT (f) * f->height;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5831 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5832 else
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5833 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5834 r.x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5835 r.y = y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5836 r.width = w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5837 r.height = h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5838 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5839
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5840 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
5841 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
5842
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
5843 if (WINDOWP (f->tool_bar_window))
37031
5cb404651755 (expose_window_tree, expose_frame): Don't compute
Gerd Moellmann <gerd@gnu.org>
parents: 36948
diff changeset
5844 expose_window (XWINDOW (f->tool_bar_window), &r);
24991
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 #ifndef USE_X_TOOLKIT
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5847 if (WINDOWP (f->menu_bar_window))
37031
5cb404651755 (expose_window_tree, expose_frame): Don't compute
Gerd Moellmann <gerd@gnu.org>
parents: 36948
diff changeset
5848 expose_window (XWINDOW (f->menu_bar_window), &r);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5849 #endif /* not USE_X_TOOLKIT */
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5852
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5853 /* 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
5854 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
5855
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5856 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5857 expose_window_tree (w, r)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5858 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5859 XRectangle *r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5860 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5861 while (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5862 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5863 if (!NILP (w->hchild))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5864 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
5865 else if (!NILP (w->vchild))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5866 expose_window_tree (XWINDOW (w->vchild), r);
37540
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
5867 else if (expose_window (w, r) == 0)
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
5868 break;
37031
5cb404651755 (expose_window_tree, expose_frame): Don't compute
Gerd Moellmann <gerd@gnu.org>
parents: 36948
diff changeset
5869 w = NILP (w->next) ? NULL : XWINDOW (w->next);
24991
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 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5872
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5873
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5874 /* 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
5875 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
5876
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5877 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5878 expose_area (w, row, r, area)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5879 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5880 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5881 XRectangle *r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5882 enum glyph_row_area area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5883 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5884 struct glyph *first = row->glyphs[area];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5885 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
5886 struct glyph *last;
34181
8f8830861b15 (expose_area): Pass x-coordinate relative to the exposed
Gerd Moellmann <gerd@gnu.org>
parents: 34159
diff changeset
5887 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
5888
25306
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5889 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
5890 /* 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
5891 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
5892 0, row->used[area],
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5893 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
5894 NULL, NULL, 0);
25306
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5895 else
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5896 {
34181
8f8830861b15 (expose_area): Pass x-coordinate relative to the exposed
Gerd Moellmann <gerd@gnu.org>
parents: 34159
diff changeset
5897 /* 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
5898 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
5899 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
5900 if (area == LEFT_MARGIN_AREA)
8f8830861b15 (expose_area): Pass x-coordinate relative to the exposed
Gerd Moellmann <gerd@gnu.org>
parents: 34159
diff changeset
5901 start_x = 0;
8f8830861b15 (expose_area): Pass x-coordinate relative to the exposed
Gerd Moellmann <gerd@gnu.org>
parents: 34159
diff changeset
5902 else if (area == TEXT_AREA)
8f8830861b15 (expose_area): Pass x-coordinate relative to the exposed
Gerd Moellmann <gerd@gnu.org>
parents: 34159
diff changeset
5903 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
5904 else
8f8830861b15 (expose_area): Pass x-coordinate relative to the exposed
Gerd Moellmann <gerd@gnu.org>
parents: 34159
diff changeset
5905 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
5906 + 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
5907 x = start_x;
8f8830861b15 (expose_area): Pass x-coordinate relative to the exposed
Gerd Moellmann <gerd@gnu.org>
parents: 34159
diff changeset
5908
25306
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5909 /* 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
5910 while (first < end
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5911 && 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
5912 {
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5913 x += first->pixel_width;
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5914 ++first;
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5915 }
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5916
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5917 /* Find the last one. */
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5918 last = first;
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5919 first_x = x;
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5920 while (last < end
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5921 && 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
5922 {
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5923 x += last->pixel_width;
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5924 ++last;
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5925 }
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5926
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5927 /* Repaint. */
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5928 if (last > first)
34181
8f8830861b15 (expose_area): Pass x-coordinate relative to the exposed
Gerd Moellmann <gerd@gnu.org>
parents: 34159
diff changeset
5929 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
5930 first - row->glyphs[area],
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5931 last - row->glyphs[area],
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5932 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
5933 NULL, NULL, 0);
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5934 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5935 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5936
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5937
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5938 /* 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
5939 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
5940
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5941 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5942 expose_line (w, row, r)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5943 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5944 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5945 XRectangle *r;
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 xassert (row->enabled_p);
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 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
5950 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
5951 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
5952 NULL, NULL, 0);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5953 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5954 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5955 if (row->used[LEFT_MARGIN_AREA])
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5956 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
5957 if (row->used[TEXT_AREA])
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5958 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
5959 if (row->used[RIGHT_MARGIN_AREA])
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5960 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
5961 x_draw_row_bitmaps (w, row);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5962 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5963 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5964
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5965
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5966 /* 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
5967
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5968 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5969 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
5970 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5971 XRectangle *r;
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 XRectangle cr, result;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5974 struct glyph *cursor_glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5975
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5976 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
5977 if (cursor_glyph)
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 cr.x = w->phys_cursor.x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5980 cr.y = w->phys_cursor.y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5981 cr.width = cursor_glyph->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5982 cr.height = w->phys_cursor_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5983 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
5984 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5985 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5986 return 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5987 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5988
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5989
37031
5cb404651755 (expose_window_tree, expose_frame): Don't compute
Gerd Moellmann <gerd@gnu.org>
parents: 36948
diff changeset
5990 /* Redraw the part of window W intersection rectangle FR. Pixel
5cb404651755 (expose_window_tree, expose_frame): Don't compute
Gerd Moellmann <gerd@gnu.org>
parents: 36948
diff changeset
5991 coordinates in FR are frame-relative. Call this function with
5cb404651755 (expose_window_tree, expose_frame): Don't compute
Gerd Moellmann <gerd@gnu.org>
parents: 36948
diff changeset
5992 input blocked. */
5cb404651755 (expose_window_tree, expose_frame): Don't compute
Gerd Moellmann <gerd@gnu.org>
parents: 36948
diff changeset
5993
37540
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
5994 static int
37031
5cb404651755 (expose_window_tree, expose_frame): Don't compute
Gerd Moellmann <gerd@gnu.org>
parents: 36948
diff changeset
5995 expose_window (w, fr)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5996 struct window *w;
37031
5cb404651755 (expose_window_tree, expose_frame): Don't compute
Gerd Moellmann <gerd@gnu.org>
parents: 36948
diff changeset
5997 XRectangle *fr;
5cb404651755 (expose_window_tree, expose_frame): Don't compute
Gerd Moellmann <gerd@gnu.org>
parents: 36948
diff changeset
5998 {
5cb404651755 (expose_window_tree, expose_frame): Don't compute
Gerd Moellmann <gerd@gnu.org>
parents: 36948
diff changeset
5999 struct frame *f = XFRAME (w->frame);
5cb404651755 (expose_window_tree, expose_frame): Don't compute
Gerd Moellmann <gerd@gnu.org>
parents: 36948
diff changeset
6000 XRectangle wr, r;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6001
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
6002 /* 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
6003 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
6004 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
6005 created window. */
37540
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6006 if (w->current_matrix == NULL)
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6007 return 1;
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6008
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6009 /* When we're currently updating the window, display and current
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6010 matrix usually don't agree. Arrange for a thorough display
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6011 later. */
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6012 if (w == updated_window)
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6013 {
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6014 SET_FRAME_GARBAGED (f);
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6015 return 0;
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6016 }
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6017
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6018 /* Frame-relative pixel rectangle of W. */
37031
5cb404651755 (expose_window_tree, expose_frame): Don't compute
Gerd Moellmann <gerd@gnu.org>
parents: 36948
diff changeset
6019 wr.x = XFASTINT (w->left) * CANON_X_UNIT (f);
5cb404651755 (expose_window_tree, expose_frame): Don't compute
Gerd Moellmann <gerd@gnu.org>
parents: 36948
diff changeset
6020 wr.y = XFASTINT (w->top) * CANON_Y_UNIT (f);
5cb404651755 (expose_window_tree, expose_frame): Don't compute
Gerd Moellmann <gerd@gnu.org>
parents: 36948
diff changeset
6021 wr.width = XFASTINT (w->width) * CANON_X_UNIT (f);
5cb404651755 (expose_window_tree, expose_frame): Don't compute
Gerd Moellmann <gerd@gnu.org>
parents: 36948
diff changeset
6022 wr.height = XFASTINT (w->height) * CANON_Y_UNIT (f);
5cb404651755 (expose_window_tree, expose_frame): Don't compute
Gerd Moellmann <gerd@gnu.org>
parents: 36948
diff changeset
6023
37540
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6024 if (x_intersect_rectangles (fr, &wr, &r))
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6025 {
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6026 int yb = window_text_bottom_y (w);
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6027 struct glyph_row *row;
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6028 int cursor_cleared_p;
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6029
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6030 TRACE ((stderr, "expose_window (%d, %d, %d, %d)\n",
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6031 r.x, r.y, r.width, r.height));
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6032
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6033 /* Convert to window coordinates. */
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6034 r.x = FRAME_TO_WINDOW_PIXEL_X (w, r.x);
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6035 r.y = FRAME_TO_WINDOW_PIXEL_Y (w, r.y);
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6036
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6037 /* Turn off the cursor. */
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6038 if (!w->pseudo_window_p
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6039 && x_phys_cursor_in_rect_p (w, &r))
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6040 {
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6041 x_clear_cursor (w);
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6042 cursor_cleared_p = 1;
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6043 }
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6044 else
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6045 cursor_cleared_p = 0;
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6046
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6047 /* Find the first row intersecting the rectangle R. */
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6048 for (row = w->current_matrix->rows;
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6049 row->enabled_p;
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6050 ++row)
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6051 {
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6052 int y0 = row->y;
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6053 int y1 = MATRIX_ROW_BOTTOM_Y (row);
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6054
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6055 if ((y0 >= r.y && y0 < r.y + r.height)
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6056 || (y1 > r.y && y1 < r.y + r.height)
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6057 || (r.y >= y0 && r.y < y1)
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6058 || (r.y + r.height > y0 && r.y + r.height < y1))
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6059 expose_line (w, row, &r);
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6060
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6061 if (y1 >= yb)
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6062 break;
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6063 }
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6064
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6065 /* Display the mode line if there is one. */
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6066 if (WINDOW_WANTS_MODELINE_P (w)
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6067 && (row = MATRIX_MODE_LINE_ROW (w->current_matrix),
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6068 row->enabled_p)
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6069 && row->y < r.y + r.height)
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6070 expose_line (w, row, &r);
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6071
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6072 if (!w->pseudo_window_p)
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6073 {
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6074 /* Draw border between windows. */
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6075 x_draw_vertical_border (w);
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6076
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6077 /* Turn the cursor on again. */
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6078 if (cursor_cleared_p)
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6079 x_update_window_cursor (w, 1);
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6080 }
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6081 }
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6082
7ba9dfa3e191 (expose_window): Return int. If W is the window
Gerd Moellmann <gerd@gnu.org>
parents: 37535
diff changeset
6083 return 1;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6084 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6085
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6086
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6087 /* 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
6088 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
6089 empty. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6090
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6091 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6092 x_intersect_rectangles (r1, r2, result)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6093 XRectangle *r1, *r2, *result;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6094 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6095 XRectangle *left, *right;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6096 XRectangle *upper, *lower;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6097 int intersection_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6098
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6099 /* 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
6100 if (r1->x < r2->x)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6101 left = r1, right = r2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6102 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6103 left = r2, right = r1;
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 /* 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
6106 otherwise there is no intersection. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6107 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
6108 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6109 result->x = right->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6110
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6111 /* 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
6112 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
6113 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
6114 - result->x);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6115
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6116 /* Same game for Y. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6117 if (r1->y < r2->y)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6118 upper = r1, lower = r2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6119 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6120 upper = r2, lower = r1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6121
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6122 /* 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
6123 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
6124 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
6125 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6126 result->y = lower->y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6127
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6128 /* 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
6129 ends of upper and lower. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6130 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
6131 upper->y + upper->height)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6132 - result->y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6133 intersection_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6134 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6135 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6136
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6137 return intersection_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6138 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6139
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6140
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6141
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6142
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6143
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6144 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
6145 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
6146 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6147 {
3943
cbdf67dd68d0 * xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents: 3938
diff changeset
6148 /* 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
6149 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
6150 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
6151 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
6152 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
6153 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
6154 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
6155 UNBLOCK_INPUT;
12431
80a5aedfb4c7 (XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents: 12192
diff changeset
6156 x_update_cursor (f, 1);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6157 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6158
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6159 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
6160 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
6161 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6162 {
3943
cbdf67dd68d0 * xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents: 3938
diff changeset
6163 /* 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
6164 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
6165 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
6166 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
6167 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
6168 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
6169 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
6170 UNBLOCK_INPUT;
12431
80a5aedfb4c7 (XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents: 12192
diff changeset
6171 x_update_cursor (f, 1);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6172 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6173
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
6174 /* The focus has changed. Update the frames as necessary to reflect
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
6175 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
6176 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
6177 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
6178 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
6179
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6180 static void
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6181 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
6182 struct x_display_info *dpyinfo;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
6183 struct frame *frame;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6184 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6185 struct frame *old_focus = dpyinfo->x_focus_frame;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6186
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6187 if (frame != dpyinfo->x_focus_frame)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6188 {
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
6189 /* Set this before calling other routines, so that they see
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
6190 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
6191 dpyinfo->x_focus_frame = frame;
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6192
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6193 if (old_focus && old_focus->auto_lower)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
6194 x_lower_frame (old_focus);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6195
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6196 #if 0
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
6197 selected_frame = frame;
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
6198 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
6199 selected_frame);
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
6200 Fselect_window (selected_frame->selected_window);
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
6201 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
6202 #endif /* ! 0 */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6203
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6204 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
6205 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
6206 else
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
6207 pending_autoraise_frame = 0;
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6208 }
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6209
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6210 x_frame_rehighlight (dpyinfo);
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6211 }
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6212
10223
97fc8c6b4a74 (XTupdate_begin): Discard records of prior mouse highlight
Richard M. Stallman <rms@gnu.org>
parents: 9823
diff changeset
6213 /* 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
6214
97fc8c6b4a74 (XTupdate_begin): Discard records of prior mouse highlight
Richard M. Stallman <rms@gnu.org>
parents: 9823
diff changeset
6215 void
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6216 x_mouse_leave (dpyinfo)
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6217 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
6218 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6219 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
6220 }
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6221
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
6222 /* 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
6223 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
6224 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
6225
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6226 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
6227 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
6228 the appropriate X display info. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6229
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6230 static void
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6231 XTframe_rehighlight (frame)
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6232 struct frame *frame;
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6233 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6234 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
6235 }
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6236
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6237 static void
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6238 x_frame_rehighlight (dpyinfo)
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6239 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
6240 {
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6241 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
6242
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6243 if (dpyinfo->x_focus_frame)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6244 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6245 dpyinfo->x_highlight_frame
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6246 = ((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
6247 ? 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
6248 : dpyinfo->x_focus_frame);
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6249 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
6250 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6251 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
6252 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
6253 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6254 }
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6255 else
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6256 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
6257
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
6258 if (dpyinfo->x_highlight_frame != old_highlight)
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6259 {
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6260 if (old_highlight)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
6261 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
6262 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
6263 frame_highlight (dpyinfo->x_highlight_frame);
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
6264 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6265 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6266
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6267
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6268
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6269 /* Keyboard processing - modifier keys, vendor-specific keysyms, etc. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6270
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6271 /* 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
6272 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
6273 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
6274 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
6275 {
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
6276 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
6277 KeySym *syms;
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6278 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
6279 XModifierKeymap *mods;
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6280
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
6281 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
6282 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
6283 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
6284 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
6285 dpyinfo->hyper_mod_mask = 0;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
6286
2127
adaf588e32a6 * xterm.c (x_find_modifier_meanings): XDisplayKeycodes only
Jim Blandy <jimb@redhat.com>
parents: 2064
diff changeset
6287 #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
6288 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
6289 #else
13884
26245345f6f1 (x_find_modifier_meanings): Fix !X11R4 code to use dpyinfo.
Richard M. Stallman <rms@gnu.org>
parents: 13782
diff changeset
6290 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
6291 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
6292 #endif
adaf588e32a6 * xterm.c (x_find_modifier_meanings): XDisplayKeycodes only
Jim Blandy <jimb@redhat.com>
parents: 2064
diff changeset
6293
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
6294 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
6295 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
6296 &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
6297 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
6298
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
6299 /* 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
6300 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
6301 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6302 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
6303
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6304 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
6305 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
6306 {
10287
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
6307 KeyCode code
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
6308 = 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
6309
6560
a071babfa9ea (x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents: 6521
diff changeset
6310 /* Zeroes are used for filler. Skip them. */
a071babfa9ea (x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents: 6521
diff changeset
6311 if (code == 0)
a071babfa9ea (x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents: 6521
diff changeset
6312 continue;
a071babfa9ea (x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents: 6521
diff changeset
6313
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6314 /* 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
6315 {
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6316 int code_col;
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6317
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6318 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
6319 {
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
6320 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
6321
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
6322 switch (sym)
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6323 {
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
6324 case XK_Meta_L:
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
6325 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
6326 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
6327 break;
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
6328
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
6329 case XK_Alt_L:
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
6330 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
6331 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
6332 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
6333
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
6334 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
6335 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
6336 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
6337 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
6338
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
6339 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
6340 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
6341 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
6342 break;
1436
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
6343
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
6344 case XK_Shift_Lock:
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
6345 /* 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
6346 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
6347 dpyinfo->shift_lock_mask = LockMask;
1436
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
6348 break;
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6349 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6350 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6351 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6352 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6353 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6354
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
6355 /* 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
6356 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
6357 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
6358 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
6359 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
6360 }
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
6361
2923
c8997402dd6b (x_find_modifier_meanings): If some keys are meta and alt,
Richard M. Stallman <rms@gnu.org>
parents: 2882
diff changeset
6362 /* 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
6363 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
6364 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
6365 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
6366 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
6367 }
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
6368
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6369 XFree ((char *) syms);
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
6370 XFreeModifiermap (mods);
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6371 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
6372
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
6373 /* 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
6374 Emacs uses. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6375
1530
a7f8a1fe258e * xterm.c (x_convert_modifiers): Declare this to return an
Jim Blandy <jimb@redhat.com>
parents: 1436
diff changeset
6376 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
6377 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
6378 struct x_display_info *dpyinfo;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6379 unsigned int state;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6380 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
6381 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
6382 | ((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
6383 | ((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
6384 | ((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
6385 | ((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
6386 | ((state & dpyinfo->hyper_mod_mask) ? hyper_modifier : 0));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6387 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6388
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
6389 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
6390 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
6391 struct x_display_info *dpyinfo;
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
6392 unsigned int state;
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
6393 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
6394 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
6395 | ((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
6396 | ((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
6397 | ((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
6398 | ((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
6399 | ((state & meta_modifier) ? dpyinfo->meta_mod_mask : 0));
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
6400 }
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6401
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6402 /* Convert a keysym to its name. */
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6403
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6404 char *
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6405 x_get_keysym_name (keysym)
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6406 KeySym keysym;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6407 {
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6408 char *value;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6409
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6410 BLOCK_INPUT;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6411 value = XKeysymToString (keysym);
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6412 UNBLOCK_INPUT;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6413
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6414 return value;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6415 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6416
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6417
3585
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6418
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6419 /* Mouse clicks and mouse movement. Rah. */
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6420
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6421 /* 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
6422 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
6423 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
6424 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
6425
6023
67aa546e4ff1 (construct_menu_click): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 6022
diff changeset
6426 void
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6427 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
6428 FRAME_PTR f;
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6429 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
6430 register int *x, *y;
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6431 XRectangle *bounds;
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6432 int noclip;
3585
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6433 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6434 /* 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
6435 even for negative values. */
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6436 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
6437 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
6438 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
6439 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
6440
3585
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6441 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
6442 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
6443
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6444 if (bounds)
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6445 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
6446 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
6447 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
6448 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
6449 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
6450 }
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6451
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6452 if (!noclip)
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6453 {
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6454 if (pix_x < 0)
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6455 pix_x = 0;
16301
a02555b4b2b9 (x_scroll_bar_create, x_scroll_bar_move):
Richard M. Stallman <rms@gnu.org>
parents: 16251
diff changeset
6456 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
6457 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
6458
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6459 if (pix_y < 0)
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6460 pix_y = 0;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6461 else if (pix_y > f->height)
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6462 pix_y = f->height;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6463 }
3585
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6464
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6465 *x = pix_x;
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6466 *y = pix_y;
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6467 }
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6468
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6469
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6470 /* 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
6471 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
6472 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
6473 return 0. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6474
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6475 int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6476 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
6477 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6478 int hpos, vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6479 int *frame_x, *frame_y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6480 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6481 int success_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6482
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6483 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
6484 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
6485
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6486 if (display_completed)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6487 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6488 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
6489 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
6490 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
6491
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6492 *frame_y = row->y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6493 *frame_x = row->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6494 while (glyph < end)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6495 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6496 *frame_x += glyph->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6497 ++glyph;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6500 success_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6501 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6502 else
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 *frame_y = *frame_x = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6505 success_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6506 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6507
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6508 *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
6509 *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
6510 return success_p;
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
6055
a9f61727a90c (construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents: 6023
diff changeset
6513
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6514 /* Prepare a mouse-event in *RESULT for placement in the input queue.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6515
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6516 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
6517 the mouse. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6518
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6519 static Lisp_Object
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
6520 construct_mouse_click (result, event, f)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6521 struct input_event *result;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6522 XButtonEvent *event;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
6523 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6524 {
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
6525 /* 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
6526 otherwise. */
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
6527 result->kind = mouse_click;
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6528 result->code = event->button - Button1;
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 642
diff changeset
6529 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
6530 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
6531 event->state)
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
6532 | (event->type == ButtonRelease
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
6533 ? up_modifier
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
6534 : down_modifier));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6535
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6536 XSETINT (result->x, event->x);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6537 XSETINT (result->y, event->y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6538 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
6539 result->arg = Qnil;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6540 return Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6541 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6542
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6543
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6544 /* Function to report a mouse movement to the mainstream Emacs code.
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6545 The input handler calls this.
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6546
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6547 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
6548 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
6549 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
6550 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
6551
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6552 static XMotionEvent last_mouse_motion_event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6553 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
6554
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6555 static void
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6556 note_mouse_movement (frame, event)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
6557 FRAME_PTR frame;
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6558 XMotionEvent *event;
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6559 {
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
6560 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
6561 last_mouse_motion_event = *event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6562 XSETFRAME (last_mouse_motion_frame, frame);
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
6563
7680
8212755ff793 (note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 7651
diff changeset
6564 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
6565 {
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
6566 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
6567 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
6568 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
6569 }
8212755ff793 (note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 7651
diff changeset
6570
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6571 /* 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
6572 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
6573 || 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
6574 || 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
6575 || 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
6576 {
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
6577 frame->mouse_moved = 1;
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
6578 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
6579 note_mouse_highlight (frame, event->x, event->y);
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6580 }
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6581 }
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6582
6644
8e2379ce4fcb (fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents: 6631
diff changeset
6583 /* 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
6584
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6585 int disable_mouse_highlight;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6588
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6589 /************************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6590 Mouse Face
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6591 ************************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6592
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6593 /* 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
6594 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
6595 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
6596 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
6597 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
6598 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
6599 date. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6600
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6601 static struct glyph *
36670
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6602 x_y_to_hpos_vpos (w, x, y, hpos, vpos, area, buffer_only_p)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6603 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6604 int x, y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6605 int *hpos, *vpos, *area;
36670
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6606 int buffer_only_p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6607 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6608 struct glyph *glyph, *end;
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
6609 struct glyph_row *row = NULL;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6610 int x0, i, left_area_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6611
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6612 /* 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
6613 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
6614 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6615 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
6616 if (!row->enabled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6617 return NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6618 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
6619 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6620 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6621
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6622 *vpos = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6623 *hpos = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6624
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6625 /* 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
6626 if (i == w->current_matrix->nrows)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6627 return NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6628
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6629 /* Get the glyph area containing X. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6630 if (w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6631 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6632 *area = TEXT_AREA;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6633 x0 = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6634 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6635 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6636 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6637 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
6638 if (x < left_area_width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6639 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6640 *area = LEFT_MARGIN_AREA;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6641 x0 = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6642 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6643 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
6644 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6645 *area = TEXT_AREA;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6646 x0 = row->x + left_area_width;
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 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6649 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6650 *area = RIGHT_MARGIN_AREA;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6651 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
6652 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6653 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6654
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6655 /* Find glyph containing X. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6656 glyph = row->glyphs[*area];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6657 end = glyph + row->used[*area];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6658 while (glyph < end)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6659 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6660 if (x < x0 + glyph->pixel_width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6661 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6662 if (w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6663 break;
36670
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6664 else if (!buffer_only_p || BUFFERP (glyph->object))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6665 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6666 }
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 x0 += glyph->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6669 ++glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6670 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6671
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6672 if (glyph == end)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6673 return NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6674
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6675 *hpos = glyph - row->glyphs[*area];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6676 return glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6677 }
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 /* 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
6681 Takes pseudo-windows into account. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6682
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6683 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6684 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
6685 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6686 int *x, *y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6687 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6688 if (w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6689 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6690 /* 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
6691 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
6692 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6693 *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
6694 *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
6695 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6696 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6697 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6698 *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
6699 *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
6700 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6701 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6702
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6703
33958
f86c06451792 (note_mouse_highlight): Change the cursor shape
Gerd Moellmann <gerd@gnu.org>
parents: 33761
diff changeset
6704 /* 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
6705 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
6706 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
6707 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
6708 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
6709
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6710 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6711 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
6712 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6713 int x, mode_line_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6714 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6715 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6716 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
6717 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
6718 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6719
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6720 if (mode_line_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6721 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
6722 else
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
6723 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
6724
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6725 if (row->enabled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6726 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6727 struct glyph *glyph, *end;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6728 Lisp_Object help, map;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6729 int x0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6730
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6731 /* Find the glyph under X. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6732 glyph = row->glyphs[TEXT_AREA];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6733 end = glyph + row->used[TEXT_AREA];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6734 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
6735 + 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
6736
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6737 while (glyph < end
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6738 && x >= x0 + glyph->pixel_width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6739 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6740 x0 += glyph->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6741 ++glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6742 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6743
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6744 if (glyph < end
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6745 && STRINGP (glyph->object)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6746 && XSTRING (glyph->object)->intervals
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6747 && glyph->charpos >= 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6748 && glyph->charpos < XSTRING (glyph->object)->size)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6749 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6750 /* 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
6751 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
6752 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
6753 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
6754 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
6755 if (!NILP (help))
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6756 {
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6757 help_echo = help;
30302
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
6758 XSETWINDOW (help_echo_window, w);
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6759 help_echo_object = glyph->object;
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6760 help_echo_pos = glyph->charpos;
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6761 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6762
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6763 /* 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
6764 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
6765 Qlocal_map, glyph->object);
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32945
diff changeset
6766 if (KEYMAPP (map))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6767 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
6768 else
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6769 {
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6770 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
6771 Qkeymap, glyph->object);
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32945
diff changeset
6772 if (KEYMAPP (map))
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6773 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
6774 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6775 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6778 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
6779 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6780
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6781
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6782 /* 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
6783 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
6784 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
6785 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
6786
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6787 static void
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6788 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
6789 struct frame *f;
11915
e2ab839155e1 (XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents: 11904
diff changeset
6790 int x, y;
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6791 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6792 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
6793 int portion;
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6794 Lisp_Object window;
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6795 struct window *w;
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6796
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6797 /* 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
6798 #ifdef USE_X_TOOLKIT
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6799 if (popup_activated ())
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6800 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6801 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6802
27967
7d61ff2d1530 (note_mouse_highlight): Return quickly if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 27962
diff changeset
6803 if (disable_mouse_highlight
7d61ff2d1530 (note_mouse_highlight): Return quickly if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 27962
diff changeset
6804 || !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
6805 return;
8e2379ce4fcb (fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents: 6631
diff changeset
6806
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6807 dpyinfo->mouse_face_mouse_x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6808 dpyinfo->mouse_face_mouse_y = y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6809 dpyinfo->mouse_face_mouse_frame = f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6810
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6811 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
6812 return;
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6813
6660
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
6814 if (gc_in_progress)
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
6815 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6816 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
6817 return;
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
6818 }
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
6819
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6820 /* Which window is that in? */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6821 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
6822
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6823 /* 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
6824 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
6825 clear_mouse_face (dpyinfo);
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 /* Not on a window -> return. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6828 if (!WINDOWP (window))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6829 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6830
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6831 /* Convert to window-relative pixel coordinates. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6832 w = XWINDOW (window);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6833 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
6834
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6835 /* 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
6836 buffer. */
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6837 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
6838 {
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6839 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
6840 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6841 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6842
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6843 if (portion == 1 || portion == 3)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6844 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6845 /* 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
6846 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
6847 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6848 }
33958
f86c06451792 (note_mouse_highlight): Change the cursor shape
Gerd Moellmann <gerd@gnu.org>
parents: 33761
diff changeset
6849 else if (portion == 2)
f86c06451792 (note_mouse_highlight): Change the cursor shape
Gerd Moellmann <gerd@gnu.org>
parents: 33761
diff changeset
6850 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
6851 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
6852 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6853 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
6854 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
6855
6791
7036e4fd549f (dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents: 6767
diff changeset
6856 /* 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
6857 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
6858 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
6859 portion == 0
6791
7036e4fd549f (dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents: 6767
diff changeset
6860 && 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
6861 && 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
6862 && (XFASTINT (w->last_overlay_modified)
97283cd93432 (construct_menu_click, note_mouse_highlight, fast_find_position):
Karl Heuer <kwzh@gnu.org>
parents: 17316
diff changeset
6863 == 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
6864 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6865 int hpos, vpos, pos, i, area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6866 struct glyph *glyph;
36670
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6867 Lisp_Object object;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6868
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6869 /* Find the glyph under X/Y. */
36670
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6870 glyph = x_y_to_hpos_vpos (w, x, y, &hpos, &vpos, &area, 0);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6871
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6872 /* 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
6873 if (glyph == NULL
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6874 || area != TEXT_AREA
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6875 || !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
6876 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6877 clear_mouse_face (dpyinfo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6878 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6879 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6880
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6881 pos = glyph->charpos;
36670
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6882 object = glyph->object;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6883 if (!STRINGP (object) && !BUFFERP (object))
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6884 return;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6885
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6886 {
36670
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6887 Lisp_Object mouse_face = Qnil, overlay = Qnil, position;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6888 Lisp_Object *overlay_vec = NULL;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6889 int len, noverlays;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6890 struct buffer *obuf;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6891 int obegv, ozv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6892
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6893 /* If we get an out-of-range value, return now; avoid an error. */
36670
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6894 if (BUFFERP (object) && pos > BUF_Z (XBUFFER (w->buffer)))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6895 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6896
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6897 /* 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
6898 overlays_at and compute_char_face. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6899 obuf = current_buffer;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6900 current_buffer = XBUFFER (w->buffer);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6901 obegv = BEGV;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6902 ozv = ZV;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6903 BEGV = BEG;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6904 ZV = Z;
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 /* Is this char mouse-active or does it have help-echo? */
36670
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6907 position = make_number (pos);
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6908
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6909 if (BUFFERP (object))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6910 {
36670
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6911 /* Put all the overlays we want in a vector in overlay_vec.
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6912 Store the length in len. If there are more than 10, make
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6913 enough space for all, and try again. */
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6914 len = 10;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6915 overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object));
36670
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6916 noverlays = overlays_at (pos, 0, &overlay_vec, &len, NULL, NULL, 0);
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6917 if (noverlays > len)
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6918 {
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6919 len = noverlays;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6920 overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object));
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6921 noverlays = overlays_at (pos, 0, &overlay_vec, &len, NULL, NULL,0);
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6922 }
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6923
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6924 /* Sort overlays into increasing priority order. */
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6925 noverlays = sort_overlays (overlay_vec, noverlays, w);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6926 }
36670
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6927 else
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6928 noverlays = 0;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6929
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6930 /* Check mouse-face highlighting. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6931 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
6932 && vpos >= dpyinfo->mouse_face_beg_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6933 && vpos <= dpyinfo->mouse_face_end_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6934 && (vpos > dpyinfo->mouse_face_beg_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6935 || hpos >= dpyinfo->mouse_face_beg_col)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6936 && (vpos < dpyinfo->mouse_face_end_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6937 || hpos < dpyinfo->mouse_face_end_col
36587
d9bb01d5dbbb (note_mouse_highlight): Call mouse_face_overlay_overlaps
Gerd Moellmann <gerd@gnu.org>
parents: 36555
diff changeset
6938 || dpyinfo->mouse_face_past_end))
d9bb01d5dbbb (note_mouse_highlight): Call mouse_face_overlay_overlaps
Gerd Moellmann <gerd@gnu.org>
parents: 36555
diff changeset
6939 /* If there exists an overlay with mouse-face overlapping
d9bb01d5dbbb (note_mouse_highlight): Call mouse_face_overlay_overlaps
Gerd Moellmann <gerd@gnu.org>
parents: 36555
diff changeset
6940 the one we are currently highlighting, we have to
d9bb01d5dbbb (note_mouse_highlight): Call mouse_face_overlay_overlaps
Gerd Moellmann <gerd@gnu.org>
parents: 36555
diff changeset
6941 check if we enter the overlapping overlay, and then
d9bb01d5dbbb (note_mouse_highlight): Call mouse_face_overlay_overlaps
Gerd Moellmann <gerd@gnu.org>
parents: 36555
diff changeset
6942 highlight only that. */
d9bb01d5dbbb (note_mouse_highlight): Call mouse_face_overlay_overlaps
Gerd Moellmann <gerd@gnu.org>
parents: 36555
diff changeset
6943 || (OVERLAYP (dpyinfo->mouse_face_overlay)
d9bb01d5dbbb (note_mouse_highlight): Call mouse_face_overlay_overlaps
Gerd Moellmann <gerd@gnu.org>
parents: 36555
diff changeset
6944 && mouse_face_overlay_overlaps (dpyinfo->mouse_face_overlay)))
d9bb01d5dbbb (note_mouse_highlight): Call mouse_face_overlay_overlaps
Gerd Moellmann <gerd@gnu.org>
parents: 36555
diff changeset
6945
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6946 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6947 /* 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
6948 clear_mouse_face (dpyinfo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6949
36670
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6950 /* Find the highest priority overlay that has a mouse-face
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6951 property. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6952 overlay = Qnil;
36670
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6953 for (i = noverlays - 1; i >= 0 && NILP (overlay); --i)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6954 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6955 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
6956 if (!NILP (mouse_face))
36670
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6957 overlay = overlay_vec[i];
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6958 }
36670
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6959 dpyinfo->mouse_face_overlay = overlay;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6960
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6961 /* 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
6962 if (NILP (overlay))
36670
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6963 mouse_face = Fget_text_property (position, Qmouse_face, object);
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6964
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6965 /* Handle the overlay case. */
36587
d9bb01d5dbbb (note_mouse_highlight): Call mouse_face_overlay_overlaps
Gerd Moellmann <gerd@gnu.org>
parents: 36555
diff changeset
6966 if (!NILP (overlay))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6967 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6968 /* 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
6969 should be active. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6970 Lisp_Object before, after;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6971 int ignore;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6972
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6973 before = Foverlay_start (overlay);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6974 after = Foverlay_end (overlay);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6975 /* 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
6976 fast_find_position (w, XFASTINT (before),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6977 &dpyinfo->mouse_face_beg_col,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6978 &dpyinfo->mouse_face_beg_row,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6979 &dpyinfo->mouse_face_beg_x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6980 &dpyinfo->mouse_face_beg_y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6981 dpyinfo->mouse_face_past_end
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6982 = !fast_find_position (w, XFASTINT (after),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6983 &dpyinfo->mouse_face_end_col,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6984 &dpyinfo->mouse_face_end_row,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6985 &dpyinfo->mouse_face_end_x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6986 &dpyinfo->mouse_face_end_y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6987 dpyinfo->mouse_face_window = window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6988 dpyinfo->mouse_face_face_id
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6989 = 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
6990 &ignore, pos + 1, 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6992 /* Display it as active. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6993 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
6994 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6995 /* Handle the text property case. */
36670
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
6996 else if (!NILP (mouse_face) && BUFFERP (object))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6997 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6998 /* 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
6999 should be active. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7000 Lisp_Object before, after, beginning, end;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7001 int ignore;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7002
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7003 beginning = Fmarker_position (w->start);
36670
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7004 end = make_number (BUF_Z (XBUFFER (object))
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7005 - XFASTINT (w->window_end_pos));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7006 before
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7007 = 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
7008 Qmouse_face,
36670
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7009 object, beginning);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7010 after
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7011 = Fnext_single_property_change (position, Qmouse_face,
36670
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7012 object, end);
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7013
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7014 /* 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
7015 fast_find_position (w, XFASTINT (before),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7016 &dpyinfo->mouse_face_beg_col,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7017 &dpyinfo->mouse_face_beg_row,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7018 &dpyinfo->mouse_face_beg_x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7019 &dpyinfo->mouse_face_beg_y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7020 dpyinfo->mouse_face_past_end
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7021 = !fast_find_position (w, XFASTINT (after),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7022 &dpyinfo->mouse_face_end_col,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7023 &dpyinfo->mouse_face_end_row,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7024 &dpyinfo->mouse_face_end_x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7025 &dpyinfo->mouse_face_end_y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7026 dpyinfo->mouse_face_window = window;
36670
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7027
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7028 if (BUFFERP (object))
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7029 dpyinfo->mouse_face_face_id
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7030 = face_at_buffer_position (w, pos, 0, 0,
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7031 &ignore, pos + 1, 1);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7032
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7033 /* Display it as active. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7034 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
7035 }
36670
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7036 else if (!NILP (mouse_face) && STRINGP (object))
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7037 {
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7038 Lisp_Object b, e;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7039 int ignore;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7040
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7041 b = Fprevious_single_property_change (make_number (pos + 1),
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7042 Qmouse_face,
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7043 object, Qnil);
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7044 e = Fnext_single_property_change (position, Qmouse_face,
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7045 object, Qnil);
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7046 if (NILP (b))
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7047 b = make_number (0);
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7048 if (NILP (e))
36948
fabff5d240fb (note_mouse_highlight): Dec the int, not the Lisp_Object.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36929
diff changeset
7049 e = make_number (XSTRING (object)->size - 1);
36670
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7050 fast_find_string_pos (w, XINT (b), object,
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7051 &dpyinfo->mouse_face_beg_col,
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7052 &dpyinfo->mouse_face_beg_row,
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7053 &dpyinfo->mouse_face_beg_x,
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7054 &dpyinfo->mouse_face_beg_y, 0);
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7055 fast_find_string_pos (w, XINT (e), object,
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7056 &dpyinfo->mouse_face_end_col,
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7057 &dpyinfo->mouse_face_end_row,
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7058 &dpyinfo->mouse_face_end_x,
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7059 &dpyinfo->mouse_face_end_y, 1);
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7060 dpyinfo->mouse_face_past_end = 0;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7061 dpyinfo->mouse_face_window = window;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7062 dpyinfo->mouse_face_face_id
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7063 = face_at_string_position (w, object, pos, 0, 0, 0, &ignore,
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7064 glyph->face_id, 1);
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7065 show_mouse_face (dpyinfo, DRAW_MOUSE_FACE);
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7066 }
24991
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7069 /* Look for a `help-echo' property. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7070 {
30369
cf4163d1218e (note_mouse_highlight): If help-echo was found in an
Gerd Moellmann <gerd@gnu.org>
parents: 30321
diff changeset
7071 Lisp_Object help, overlay;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7072
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7073 /* Check overlays first. */
31694
97c48afc4c5a (x_draw_image_glyph_string): Remove a comment describing
Gerd Moellmann <gerd@gnu.org>
parents: 31614
diff changeset
7074 help = overlay = Qnil;
30371
f69ecffe8453 (note_mouse_highlight): Process overlays in the right
Gerd Moellmann <gerd@gnu.org>
parents: 30369
diff changeset
7075 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
7076 {
cf4163d1218e (note_mouse_highlight): If help-echo was found in an
Gerd Moellmann <gerd@gnu.org>
parents: 30321
diff changeset
7077 overlay = overlay_vec[i];
cf4163d1218e (note_mouse_highlight): If help-echo was found in an
Gerd Moellmann <gerd@gnu.org>
parents: 30321
diff changeset
7078 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
7079 }
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
7080
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
7081 if (!NILP (help))
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
7082 {
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
7083 help_echo = help;
30302
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
7084 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
7085 help_echo_object = overlay;
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
7086 help_echo_pos = pos;
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
7087 }
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
7088 else
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
7089 {
36704
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7090 Lisp_Object object = glyph->object;
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7091 int charpos = glyph->charpos;
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7092
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
7093 /* Try text properties. */
36704
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7094 if (STRINGP (object)
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7095 && charpos >= 0
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7096 && charpos < XSTRING (object)->size)
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7097 {
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7098 help = Fget_text_property (make_number (charpos),
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7099 Qhelp_echo, object);
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7100 if (NILP (help))
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7101 {
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7102 /* If the string itself doesn't specify a help-echo,
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7103 see if the buffer text ``under'' it does. */
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7104 struct glyph_row *r
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7105 = MATRIX_ROW (w->current_matrix, vpos);
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7106 int start = MATRIX_ROW_START_CHARPOS (r);
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7107 int pos = string_buffer_position (w, object, start);
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7108 if (pos > 0)
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7109 {
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7110 help = Fget_text_property (make_number (pos),
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7111 Qhelp_echo, w->buffer);
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7112 if (!NILP (help))
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7113 {
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7114 charpos = pos;
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7115 object = w->buffer;
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7116 }
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7117 }
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7118 }
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7119 }
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7120 else if (BUFFERP (object)
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7121 && charpos >= BEGV
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7122 && charpos < ZV)
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7123 help = Fget_text_property (make_number (charpos), Qhelp_echo,
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7124 object);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7125
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
7126 if (!NILP (help))
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
7127 {
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
7128 help_echo = help;
30302
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
7129 help_echo_window = window;
36704
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7130 help_echo_object = object;
3f4b8c812d5d (note_mouse_highlight): If there's no help-echo on
Gerd Moellmann <gerd@gnu.org>
parents: 36670
diff changeset
7131 help_echo_pos = charpos;
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
7132 }
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
7133 }
24991
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7136 BEGV = obegv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7137 ZV = ozv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7138 current_buffer = obuf;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7139 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7140 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7141 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7142
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7143 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7144 redo_mouse_highlight ()
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7145 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7146 if (!NILP (last_mouse_motion_frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7147 && 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
7148 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
7149 last_mouse_motion_event.x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7150 last_mouse_motion_event.y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7151 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7152
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7153
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7154
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7155 /***********************************************************************
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7156 Tool-bars
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7157 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7158
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7159 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
7160 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
7161
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7162 /* 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
7163 or -1. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7164
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7165 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
7166
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7167
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7168 /* 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
7169 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
7170 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
7171 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
7172 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
7173
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7174 -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
7175 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
7176 1 otherwise. */
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7177
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7178 static int
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7179 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
7180 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7181 int x, y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7182 struct glyph **glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7183 int *hpos, *vpos, *prop_idx;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7184 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7185 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
7186 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
7187 int area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7188
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7189 /* Find the glyph under X/Y. */
36670
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7190 *glyph = x_y_to_hpos_vpos (w, x, y, hpos, vpos, &area, 0);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7191 if (*glyph == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7192 return -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7193
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7194 /* 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
7195 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
7196 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
7197 return -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7198
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7199 /* 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
7200 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
7201 && *vpos >= dpyinfo->mouse_face_beg_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7202 && *vpos <= dpyinfo->mouse_face_end_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7203 && (*vpos > dpyinfo->mouse_face_beg_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7204 || *hpos >= dpyinfo->mouse_face_beg_col)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7205 && (*vpos < dpyinfo->mouse_face_end_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7206 || *hpos < dpyinfo->mouse_face_end_col
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7207 || dpyinfo->mouse_face_past_end))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7208 return 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7209
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7210 return 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7211 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7212
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7213
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7214 /* 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
7215 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
7216 or ButtonRelase. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7217
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7218 static void
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7219 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
7220 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7221 XButtonEvent *button_event;
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 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
7224 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
7225 int hpos, vpos, prop_idx;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7226 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7227 Lisp_Object enabled_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7228 int x = button_event->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7229 int y = button_event->y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7230
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7231 /* 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
7232 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
7233 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
7234 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7235
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7236 /* 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
7237 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
7238 if (NILP (enabled_p))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7239 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7240
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7241 if (button_event->type == ButtonPress)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7242 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7243 /* Show item in pressed state. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7244 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
7245 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
7246 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
7247 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7248 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7249 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7250 Lisp_Object key, frame;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7251 struct input_event event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7252
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7253 /* Show item in released state. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7254 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
7255 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
7256
33761
047804baee1c (x_handle_tool_bar_click, note_tool_bar_highlight):
Gerd Moellmann <gerd@gnu.org>
parents: 33643
diff changeset
7257 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
7258
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7259 XSETFRAME (frame, f);
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7260 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
7261 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
7262 event.arg = frame;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7263 kbd_buffer_store_event (&event);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7264
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7265 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
7266 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
7267 event.arg = key;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7268 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
7269 button_event->state);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7270 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
7271 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
7272 }
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7273 }
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7274
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7275
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7276 /* 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
7277 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
7278 note_mouse_highlight. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7279
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7280 static void
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7281 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
7282 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7283 int x, y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7284 {
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7285 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
7286 struct window *w = XWINDOW (window);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7287 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
7288 int hpos, vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7289 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7290 struct glyph_row *row;
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
7291 int i;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7292 Lisp_Object enabled_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7293 int prop_idx;
36929
9d0ed4b0c89a (x_update_window_end): Handle overwritten mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 36880
diff changeset
7294 enum draw_glyphs_face draw;
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
7295 int mouse_down_p, rc;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7296
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7297 /* 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
7298 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
7299 if (x <= 0 || y <= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7300 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7301 clear_mouse_face (dpyinfo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7302 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7303 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7304
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7305 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
7306 if (rc < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7307 {
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7308 /* Not on tool-bar item. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7309 clear_mouse_face (dpyinfo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7310 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7311 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7312 else if (rc == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7313 goto set_help_echo;
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 clear_mouse_face (dpyinfo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7316
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7317 /* 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
7318 mouse_down_p = (dpyinfo->grabbed
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7319 && f == last_mouse_frame
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7320 && FRAME_LIVE_P (f));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7321 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
7322 && 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
7323 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7324
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7325 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
7326 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
7327
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7328 /* 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
7329 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
7330 if (!NILP (enabled_p))
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 /* 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
7333 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
7334 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
7335 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
7336 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
7337
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7338 /* 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
7339 dpyinfo->mouse_face_beg_col = hpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7340 dpyinfo->mouse_face_beg_row = vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7341 dpyinfo->mouse_face_beg_x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7342 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
7343 dpyinfo->mouse_face_past_end = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7344
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7345 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
7346 dpyinfo->mouse_face_end_row = vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7347 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
7348 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
7349 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
7350 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
7351
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7352 /* Display it as active. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7353 show_mouse_face (dpyinfo, draw);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7354 dpyinfo->mouse_face_image_state = draw;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7355 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7356
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7357 set_help_echo:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7358
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
7359 /* 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
7360 XTread_socket does the rest. */
30302
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
7361 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
7362 help_echo_pos = -1;
33761
047804baee1c (x_handle_tool_bar_click, note_tool_bar_highlight):
Gerd Moellmann <gerd@gnu.org>
parents: 33643
diff changeset
7363 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
7364 if (NILP (help_echo))
33761
047804baee1c (x_handle_tool_bar_click, note_tool_bar_highlight):
Gerd Moellmann <gerd@gnu.org>
parents: 33643
diff changeset
7365 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
7366 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7367
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7368
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7369
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7370 /* 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
7371 *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
7372 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
7373 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
7374 last line in W. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7375
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7376 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7377 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
7378 struct window *w;
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7379 int pos;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7380 int *hpos, *vpos, *x, *y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7381 {
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7382 int i;
6644
8e2379ce4fcb (fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents: 6631
diff changeset
7383 int lastcol;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7384 int maybe_next_line_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7385 int line_start_position;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7386 int yb = window_text_bottom_y (w);
36824
7c7084a9f736 (fast_find_position): Return the correct vpos.
Gerd Moellmann <gerd@gnu.org>
parents: 36800
diff changeset
7387 struct glyph_row *row, *best_row;
7c7084a9f736 (fast_find_position): Return the correct vpos.
Gerd Moellmann <gerd@gnu.org>
parents: 36800
diff changeset
7388 int row_vpos, best_row_vpos;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7389 int current_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7390
36824
7c7084a9f736 (fast_find_position): Return the correct vpos.
Gerd Moellmann <gerd@gnu.org>
parents: 36800
diff changeset
7391 row = best_row = MATRIX_FIRST_TEXT_ROW (w->current_matrix);
7c7084a9f736 (fast_find_position): Return the correct vpos.
Gerd Moellmann <gerd@gnu.org>
parents: 36800
diff changeset
7392 row_vpos = best_row_vpos = MATRIX_ROW_VPOS (row, w->current_matrix);
7c7084a9f736 (fast_find_position): Return the correct vpos.
Gerd Moellmann <gerd@gnu.org>
parents: 36800
diff changeset
7393
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7394 while (row->y < yb)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7395 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7396 if (row->used[TEXT_AREA])
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7397 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
7398 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7399 line_start_position = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7400
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7401 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
7402 break;
9762
567e3670acc3 (fast_find_position): Special case if POS is end of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 9741
diff changeset
7403 /* 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
7404 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
7405 else if (line_start_position == pos
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7406 && pos == BUF_ZV (XBUFFER (w->buffer)))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7407 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7408 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
7409 break;
567e3670acc3 (fast_find_position): Special case if POS is end of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 9741
diff changeset
7410 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7411 else if (line_start_position > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7412 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7413 best_row = row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7414 best_row_vpos = row_vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7415 }
28281
bd0839655485 (fast_find_position): Make sure not to consider rows
Gerd Moellmann <gerd@gnu.org>
parents: 28231
diff changeset
7416
bd0839655485 (fast_find_position): Make sure not to consider rows
Gerd Moellmann <gerd@gnu.org>
parents: 28231
diff changeset
7417 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
7418 break;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7419
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7420 ++row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7421 ++row_vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7422 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7423
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7424 /* 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
7425 lastcol = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7426 current_x = best_row->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7427 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
7428 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7429 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
7430 int charpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7431
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7432 charpos = glyph->charpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7433 if (charpos == pos)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7434 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7435 *hpos = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7436 *vpos = best_row_vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7437 *x = current_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7438 *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
7439 return 1;
8e2379ce4fcb (fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents: 6631
diff changeset
7440 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7441 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
7442 break;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7443 else if (charpos > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7444 lastcol = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7445
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7446 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
7447 }
8e2379ce4fcb (fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents: 6631
diff changeset
7448
9762
567e3670acc3 (fast_find_position): Special case if POS is end of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 9741
diff changeset
7449 /* 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
7450 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
7451 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
7452 if (maybe_next_line_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7453 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7454 ++best_row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7455 ++best_row_vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7456 lastcol = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7457 current_x = best_row->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7458 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7459
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7460 *vpos = best_row_vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7461 *hpos = lastcol + 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7462 *x = current_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7463 *y = best_row->y;
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7464 return 0;
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7465 }
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7466
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7467
36670
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7468 /* Find the position of the the glyph for position POS in OBJECT in
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7469 window W's current matrix, and return in *X/*Y the pixel
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7470 coordinates, and return in *HPOS/*VPOS the column/row of the glyph.
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7471
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7472 RIGHT_P non-zero means return the position of the right edge of the
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7473 glyph, RIGHT_P zero means return the left edge position.
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7474
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7475 If no glyph for POS exists in the matrix, return the position of
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7476 the glyph with the next smaller position that is in the matrix, if
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7477 RIGHT_P is zero. If RIGHT_P is non-zero, and no glyph for POS
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7478 exists in the matrix, return the position of the glyph with the
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7479 next larger position in OBJECT.
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7480
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7481 Value is non-zero if a glyph was found. */
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7482
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7483 static int
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7484 fast_find_string_pos (w, pos, object, hpos, vpos, x, y, right_p)
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7485 struct window *w;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7486 int pos;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7487 Lisp_Object object;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7488 int *hpos, *vpos, *x, *y;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7489 int right_p;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7490 {
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7491 int yb = window_text_bottom_y (w);
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7492 struct glyph_row *r;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7493 struct glyph *best_glyph = NULL;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7494 struct glyph_row *best_row = NULL;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7495 int best_x = 0;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7496
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7497 for (r = MATRIX_FIRST_TEXT_ROW (w->current_matrix);
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7498 r->enabled_p && r->y < yb;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7499 ++r)
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7500 {
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7501 struct glyph *g = r->glyphs[TEXT_AREA];
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7502 struct glyph *e = g + r->used[TEXT_AREA];
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7503 int gx;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7504
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7505 for (gx = r->x; g < e; gx += g->pixel_width, ++g)
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7506 if (EQ (g->object, object))
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7507 {
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7508 if (g->charpos == pos)
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7509 {
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7510 best_glyph = g;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7511 best_x = gx;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7512 best_row = r;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7513 goto found;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7514 }
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7515 else if (best_glyph == NULL
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7516 || ((abs (g->charpos - pos)
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7517 < abs (best_glyph->charpos - pos))
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7518 && (right_p
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7519 ? g->charpos < pos
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7520 : g->charpos > pos)))
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7521 {
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7522 best_glyph = g;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7523 best_x = gx;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7524 best_row = r;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7525 }
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7526 }
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7527 }
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7528
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7529 found:
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7530
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7531 if (best_glyph)
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7532 {
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7533 *x = best_x;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7534 *hpos = best_glyph - best_row->glyphs[TEXT_AREA];
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7535
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7536 if (right_p)
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7537 {
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7538 *x += best_glyph->pixel_width;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7539 ++*hpos;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7540 }
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7541
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7542 *y = best_row->y;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7543 *vpos = best_row - w->current_matrix->rows;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7544 }
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7545
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7546 return best_glyph != NULL;
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7547 }
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7548
ba5967636e33 (note_mouse_highlight): Handle mouse-face and
Gerd Moellmann <gerd@gnu.org>
parents: 36599
diff changeset
7549
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7550 /* 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
7551 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
7552
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7553 static void
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7554 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
7555 struct x_display_info *dpyinfo;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7556 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
7557 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7558 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
7559 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
7560 int i;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7561 int cursor_off_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7562 struct cursor_pos saved_cursor;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7563
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7564 saved_cursor = output_cursor;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7565
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7566 /* 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
7567 to do anything. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7568 if (w->current_matrix == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7569 goto set_x_cursor;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7570
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7571 /* 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
7572 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
7573 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
7574 goto set_x_cursor;
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 set_output_cursor (&w->phys_cursor);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7577
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7578 /* 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
7579 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
7580 i <= dpyinfo->mouse_face_end_row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7581 i++)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7582 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7583 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
7584 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
7585
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7586 /* 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
7587 if (!row->enabled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7588 continue;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7589
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7590 /* 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
7591 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
7592 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7593 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
7594 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
7595 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7596 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7597 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7598 start_hpos = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7599 start_x = 0;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7602 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
7603 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
7604 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7605 end_hpos = row->used[TEXT_AREA];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7606
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7607 /* 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
7608 cursor off. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7609 if (!w->pseudo_window_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7610 && i == output_cursor.vpos
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7611 && output_cursor.hpos >= start_hpos - 1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7612 && output_cursor.hpos <= end_hpos)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7613 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7614 x_update_window_cursor (w, 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7615 cursor_off_p = 1;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7618 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
7619 {
36929
9d0ed4b0c89a (x_update_window_end): Handle overwritten mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 36880
diff changeset
7620 row->mouse_face_p = draw == DRAW_MOUSE_FACE || DRAW_IMAGE_RAISED;
30153
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
7621 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
7622 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
7623 }
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7624 }
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7625
6660
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
7626 /* 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
7627 if (cursor_off_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7628 x_display_cursor (w, 1,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7629 output_cursor.hpos, output_cursor.vpos,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7630 output_cursor.x, output_cursor.y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7631
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7632 output_cursor = saved_cursor;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7633
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7634 set_x_cursor:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7635
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7636 /* Change the mouse cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7637 if (draw == DRAW_NORMAL_TEXT)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7638 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
7639 f->output_data.x->text_cursor);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7640 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
7641 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
7642 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
7643 else
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
7644 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
7645 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
7646 }
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7647
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7648 /* 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
7649 Redraw it un-highlighted first. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7650
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7651 void
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7652 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
7653 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
7654 {
35272
b179c9139145 (clear_mouse_face=): Improve a comment.
Gerd Moellmann <gerd@gnu.org>
parents: 35082
diff changeset
7655 #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
7656 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
7657 if (!NILP (tip_frame))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7658 return;
35066
f4b5ec3edf1a (clear_mouse_face): Don't return if tip_frame is
Gerd Moellmann <gerd@gnu.org>
parents: 34978
diff changeset
7659 #endif
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7660
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7661 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
7662 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
7663
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7664 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
7665 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
7666 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
7667 }
16491
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7668
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7669
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7670 /* 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
7671 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
7672 functions to ensure the mouse-highlight is off. */
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7673
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7674 static void
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7675 x_clear_mouse_face (w)
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7676 struct window *w;
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7677 {
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7678 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
7679 Lisp_Object window;
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7680
31864
3df9d3316990 (x_clear_mouse_face): Blick/unblock input.
Gerd Moellmann <gerd@gnu.org>
parents: 31844
diff changeset
7681 BLOCK_INPUT;
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7682 XSETWINDOW (window, w);
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7683 if (EQ (window, dpyinfo->mouse_face_window))
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7684 clear_mouse_face (dpyinfo);
31864
3df9d3316990 (x_clear_mouse_face): Blick/unblock input.
Gerd Moellmann <gerd@gnu.org>
parents: 31844
diff changeset
7685 UNBLOCK_INPUT;
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7686 }
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7687
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7688
16491
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7689 /* 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
7690 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
7691
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
7692 void
16491
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7693 cancel_mouse_face (f)
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7694 FRAME_PTR f;
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7695 {
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7696 Lisp_Object window;
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7697 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
7698
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7699 window = dpyinfo->mouse_face_window;
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7700 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
7701 {
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7702 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
7703 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
7704 dpyinfo->mouse_face_window = Qnil;
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7705 }
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7706 }
36492
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7707
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7708
36492
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7709 static int glyph_rect P_ ((struct frame *f, int, int, XRectangle *));
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7710
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7711
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7712 /* Try to determine frame pixel position and size of the glyph under
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7713 frame pixel coordinates X/Y on frame F . Return the position and
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7714 size in *RECT. Value is non-zero if we could compute these
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7715 values. */
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7716
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7717 static int
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7718 glyph_rect (f, x, y, rect)
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7719 struct frame *f;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7720 int x, y;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7721 XRectangle *rect;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7722 {
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7723 Lisp_Object window;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7724 int part, found = 0;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7725
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7726 window = window_from_coordinates (f, x, y, &part, 0);
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7727 if (!NILP (window))
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7728 {
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7729 struct window *w = XWINDOW (window);
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7730 struct glyph_row *r = MATRIX_FIRST_TEXT_ROW (w->current_matrix);
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7731 struct glyph_row *end = r + w->current_matrix->nrows - 1;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7732 int area;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7733
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7734 frame_to_window_pixel_xy (w, &x, &y);
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7735
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7736 for (; !found && r < end && r->enabled_p; ++r)
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7737 if (r->y >= y)
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7738 {
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7739 struct glyph *g = r->glyphs[TEXT_AREA];
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7740 struct glyph *end = g + r->used[TEXT_AREA];
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7741 int gx;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7742
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7743 for (gx = r->x; !found && g < end; gx += g->pixel_width, ++g)
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7744 if (gx >= x)
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7745 {
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7746 rect->width = g->pixel_width;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7747 rect->height = r->height;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7748 rect->x = WINDOW_TO_FRAME_PIXEL_X (w, gx);
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7749 rect->y = WINDOW_TO_FRAME_PIXEL_Y (w, r->y);
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7750 found = 1;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7751 }
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7752 }
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7753 }
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7754
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7755 return found;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7756 }
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7757
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7758
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7759 /* Return the current position of the mouse.
36492
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7760 *FP should be a frame which indicates which display to ask about.
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7761
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7762 If the mouse movement started in a scroll bar, set *FP, *BAR_WINDOW,
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7763 and *PART to the frame, window, and scroll bar part that the mouse
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7764 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
7765 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
7766
36492
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7767 If the mouse movement started elsewhere, set *FP to the frame the
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7768 mouse is on, *BAR_WINDOW to nil, and *X and *Y to the character cell
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7769 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
7770
36492
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7771 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
7772 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
7773
3669
fd4187a96445 (XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents: 3639
diff changeset
7774 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
7775
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7776 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
7777 movement. */
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7778
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7779 static void
11122
ce63fb361ae9 (XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents: 11015
diff changeset
7780 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
7781 FRAME_PTR *fp;
11122
ce63fb361ae9 (XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents: 11015
diff changeset
7782 int insist;
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7783 Lisp_Object *bar_window;
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7784 enum scroll_bar_part *part;
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7785 Lisp_Object *x, *y;
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
7786 unsigned long *time;
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7787 {
3669
fd4187a96445 (XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents: 3639
diff changeset
7788 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
7789
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7790 BLOCK_INPUT;
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7791
20180
bfbf6a2939a3 (XTmouse_position): Handle INSIST < 0.
Karl Heuer <kwzh@gnu.org>
parents: 19447
diff changeset
7792 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
7793 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
7794 else
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7795 {
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7796 Window root;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7797 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
7798
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7799 Window dummy_window;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7800 int dummy;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7801
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
7802 Lisp_Object frame, tail;
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
7803
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
7804 /* 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
7805 FOR_EACH_FRAME (tail, frame)
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
7806 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
7807 XFRAME (frame)->mouse_moved = 0;
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
7808
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7809 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
7810
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7811 /* 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
7812 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
7813 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
7814
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7815 /* 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
7816 &root,
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7817
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7818 /* 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
7819 a different screen. */
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7820 &dummy_window,
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7821
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7822 /* The position on that root window. */
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
7823 &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
7824
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7825 /* 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
7826 &dummy, &dummy,
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7827
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7828 /* 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
7829 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
7830 (unsigned int *) &dummy);
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7831
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7832 /* 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
7833 containing the pointer. */
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7834 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7835 Window win, child;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7836 int win_x, win_y;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7837 int parent_x = 0, parent_y = 0;
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7838 int count;
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7839
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7840 win = root;
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7841
11436
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
7842 /* 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
7843 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
7844 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
7845
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7846 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
7847
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
7848 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
7849 && 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
7850 {
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7851 /* 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
7852 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
7853 XTranslateCoordinates (FRAME_X_DISPLAY (*fp),
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7854
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7855 /* From-window, to-window. */
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7856 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
7857
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7858 /* 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
7859 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
7860
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7861 /* Child of win. */
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7862 &child);
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7863 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
7864 }
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7865 else
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7866 {
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7867 while (1)
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7868 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
7869 XTranslateCoordinates (FRAME_X_DISPLAY (*fp),
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7870
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7871 /* From-window, to-window. */
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7872 root, win,
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7873
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7874 /* From-position, to-position. */
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7875 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
7876
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7877 /* Child of win. */
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7878 &child);
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7879
13627
8873aa3451dd (XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents: 13598
diff changeset
7880 if (child == None || child == win)
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7881 break;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7882
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7883 win = child;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7884 parent_x = win_x;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7885 parent_y = win_y;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7886 }
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7887
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7888 /* Now we know that:
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7889 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
7890 (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
7891 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
7892 (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
7893 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
7894 (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
7895 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
7896 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
7897 never use them in that case.) */
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7898
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7899 /* 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
7900 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
7901
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
7902 #ifdef USE_X_TOOLKIT
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
7903 /* 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
7904 on the frame. */
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
7905 if (f1 != NULL
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
7906 && f1->output_data.x->menubar_widget
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
7907 && 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
7908 f1 = NULL;
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
7909 #endif /* USE_X_TOOLKIT */
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7910 }
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
7911
11436
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
7912 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
7913 f1 = 0;
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
7914
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7915 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
7916
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7917 /* 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
7918 if (! f1)
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7919 {
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7920 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
7921
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7922 if (bar)
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7923 {
3669
fd4187a96445 (XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents: 3639
diff changeset
7924 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
7925 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
7926 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
7927 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7928 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7929
20180
bfbf6a2939a3 (XTmouse_position): Handle INSIST < 0.
Karl Heuer <kwzh@gnu.org>
parents: 19447
diff changeset
7930 if (f1 == 0 && insist > 0)
25682
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
7931 f1 = SELECTED_FRAME ();
11122
ce63fb361ae9 (XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents: 11015
diff changeset
7932
3669
fd4187a96445 (XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents: 3639
diff changeset
7933 if (f1)
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7934 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7935 /* 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
7936 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
7937 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
7938 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
7939 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
7940 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
7941 the frame are divided into. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7942
36492
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7943 int width, height, gx, gy;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7944 XRectangle rect;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7945
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7946 if (glyph_rect (f1, win_x, win_y, &rect))
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7947 last_mouse_glyph = rect;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7948 else
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7949 {
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7950 width = FRAME_SMALLEST_CHAR_WIDTH (f1);
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7951 height = FRAME_SMALLEST_FONT_HEIGHT (f1);
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7952 gx = win_x;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7953 gy = win_y;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7954
36492
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7955 /* Arrange for the division in PIXEL_TO_CHAR_COL etc. to
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7956 round down even for negative values. */
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7957 if (gx < 0)
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7958 gx -= width - 1;
36555
b6b9363f3e20 (XTmouse_position): Fix tyypo.
Dave Love <fx@gnu.org>
parents: 36492
diff changeset
7959 if (gy < 0)
36492
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7960 gy -= height - 1;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7961 gx = (gx + width - 1) / width * width;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7962 gy = (gy + height - 1) / height * height;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7963
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7964 last_mouse_glyph.width = width;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7965 last_mouse_glyph.height = height;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7966 last_mouse_glyph.x = gx;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7967 last_mouse_glyph.y = gy;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
7968 }
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7969
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7970 *bar_window = Qnil;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7971 *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
7972 *fp = f1;
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
7973 XSETINT (*x, win_x);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
7974 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
7975 *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
7976 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7977 }
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7978 }
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7979
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7980 UNBLOCK_INPUT;
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7981 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7982
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7983
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7984 #ifdef USE_X_TOOLKIT
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7985
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7986 /* 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
7987 Xt timeouts, if needed. We must avoid calling XtAppPending as
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7988 much as possible because that function does an implicit XFlush
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7989 that slows us down. */
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7990
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7991 static void
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7992 x_process_timeouts (timer)
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7993 struct atimer *timer;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7994 {
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7995 if (toolkit_scroll_bar_interaction || popup_activated_flag)
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7996 {
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7997 BLOCK_INPUT;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7998 while (XtAppPending (Xt_app_con) & XtIMTimer)
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7999 XtAppProcessEvent (Xt_app_con, XtIMTimer);
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
8000 UNBLOCK_INPUT;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
8001 }
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
8002 }
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
8003
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8004 #endif /* USE_X_TOOLKIT */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8005
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
8006
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8007 /* Scroll bar support. */
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8008
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8009 /* 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
8010 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
8011 bits. */
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
8012
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8013 static struct scroll_bar *
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8014 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
8015 Window window_id;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8016 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8017 Lisp_Object tail;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8018
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8019 for (tail = Vframe_list;
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8020 XGCTYPE (tail) == Lisp_Cons;
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
8021 tail = XCDR (tail))
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8022 {
6521
a975c5944916 (x_window_to_scroll_bar, x_new_font): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6413
diff changeset
8023 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
8024
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
8025 frame = XCAR (tail);
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8026 /* 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
8027 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
8028 abort ();
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8029
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8030 /* 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
8031 right window ID. */
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8032 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
8033 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
8034 /* 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
8035 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
8036 ! GC_NILP (bar) || (bar = condemned,
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8037 condemned = Qnil,
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8038 ! 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
8039 bar = XSCROLL_BAR (bar)->next)
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8040 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
8041 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
8042 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8043
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8044 return 0;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8045 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8046
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8047
37525
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
8048 #if defined USE_X_TOOLKIT && defined USE_LUCID
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
8049
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
8050 /* Return the Lucid menu bar WINDOW is part of. Return null
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
8051 if WINDOW is not part of a menu bar. */
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
8052
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
8053 static Widget
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
8054 x_window_to_menu_bar (window)
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
8055 Window window;
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
8056 {
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
8057 Lisp_Object tail;
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
8058
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
8059 for (tail = Vframe_list;
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
8060 XGCTYPE (tail) == Lisp_Cons;
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
8061 tail = XCDR (tail))
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
8062 {
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
8063 Lisp_Object frame = XCAR (tail);
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
8064 Widget menu_bar = XFRAME (frame)->output_data.x->menubar_widget;
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
8065
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
8066 if (menu_bar && xlwmenu_window_p (menu_bar, window))
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
8067 return menu_bar;
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
8068 }
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
8069
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
8070 return NULL;
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
8071 }
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
8072
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
8073 #endif /* USE_X_TOOLKIT && USE_LUCID */
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
8074
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8075
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 Toolkit scroll bars
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8078 ************************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8079
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
8080 #ifdef USE_TOOLKIT_SCROLL_BARS
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8081
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8082 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
8083 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
8084 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
8085 struct scroll_bar *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8086 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
8087 int, int, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8088
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8089
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8090 /* 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
8091
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8092 static XtActionHookId action_hook_id;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8093
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8094 /* 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
8095 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
8096
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8097 static Lisp_Object window_being_scrolled;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8098
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8099 /* 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
8100
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8101 static int last_scroll_bar_part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8102
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8103 /* 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
8104 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
8105
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8106 static Boolean xaw3d_arrow_scroll;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8107
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8108 /* 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
8109 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
8110 to avoid jerkyness. */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8111
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8112 static Boolean xaw3d_pick_top;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8113
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8114
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8115 /* 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
8116 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
8117 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
8118 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
8119
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8120 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8121 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
8122 num_params)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8123 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8124 XtPointer client_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8125 String action_name;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8126 XEvent *event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8127 String *params;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8128 Cardinal *num_params;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8129 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8130 int scroll_bar_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8131 char *end_action;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8132
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8133 #ifdef USE_MOTIF
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8134 scroll_bar_p = XmIsScrollBar (widget);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8135 end_action = "Release";
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 scroll_bar_p = XtIsSubclass (widget, scrollbarWidgetClass);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8138 end_action = "EndScroll";
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8139 #endif /* USE_MOTIF */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8140
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8141 if (scroll_bar_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8142 && strcmp (action_name, end_action) == 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8143 && WINDOWP (window_being_scrolled))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8144 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8145 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8146
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8147 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
8148 scroll_bar_end_scroll, 0, 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8149 w = XWINDOW (window_being_scrolled);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8150 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
8151 window_being_scrolled = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8152 last_scroll_bar_part = -1;
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
8153
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
8154 /* Xt timeouts no longer needed. */
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
8155 toolkit_scroll_bar_interaction = 0;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8156 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8157 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8158
33643
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8159 /* 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
8160 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
8161
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8162 static struct window **scroll_bar_windows;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8163 static int scroll_bar_windows_size;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8164
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8165
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8166 /* 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
8167 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
8168 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
8169 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
8170
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8171 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8172 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
8173 Lisp_Object window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8174 int part, portion, whole;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8175 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8176 XEvent event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8177 XClientMessageEvent *ev = (XClientMessageEvent *) &event;
33643
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8178 struct window *w = XWINDOW (window);
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8179 struct frame *f = XFRAME (w->frame);
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8180 int i;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8181
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8182 BLOCK_INPUT;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8183
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8184 /* 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
8185 ev->type = ClientMessage;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8186 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
8187 ev->display = FRAME_X_DISPLAY (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8188 ev->window = FRAME_X_WINDOW (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8189 ev->format = 32;
33643
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8190
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8191 /* 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
8192 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
8193 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
8194 into that array in the event. */
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8195 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
8196 if (scroll_bar_windows[i] == NULL)
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8197 break;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8198
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8199 if (i == scroll_bar_windows_size)
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8200 {
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8201 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
8202 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
8203 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
8204
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8205 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
8206 nbytes);
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8207 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
8208 scroll_bar_windows_size = new_size;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8209 }
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8210
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8211 scroll_bar_windows[i] = w;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8212 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
8213 ev->data.l[1] = (long) part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8214 ev->data.l[2] = (long) 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8215 ev->data.l[3] = (long) portion;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8216 ev->data.l[4] = (long) whole;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8217
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
8218 /* Make Xt timeouts work while the scroll bar is active. */
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
8219 toolkit_scroll_bar_interaction = 1;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
8220
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8221 /* 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
8222 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
8223 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
8224 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
8225 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8226 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8227
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8228
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8229 /* 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
8230 in *IEVENT. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8231
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8232 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8233 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
8234 XEvent *event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8235 struct input_event *ievent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8236 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8237 XClientMessageEvent *ev = (XClientMessageEvent *) event;
29717
acaa36b47f50 fix up more Lisp_Object/int conversion issues
Ken Raeburn <raeburn@raeburn.org>
parents: 29619
diff changeset
8238 Lisp_Object window;
acaa36b47f50 fix up more Lisp_Object/int conversion issues
Ken Raeburn <raeburn@raeburn.org>
parents: 29619
diff changeset
8239 struct frame *f;
33643
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8240 struct window *w;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8241
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8242 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
8243 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
8244
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8245 XSETWINDOW (window, w);
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
8246 f = XFRAME (w->frame);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8247
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8248 ievent->kind = scroll_bar_click;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8249 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
8250 ievent->arg = Qnil;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8251 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
8252 ievent->part = ev->data.l[1];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8253 ievent->code = ev->data.l[2];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8254 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
8255 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
8256 ievent->modifiers = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8257 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8258
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8259
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8260 #ifdef USE_MOTIF
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8261
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8262 /* 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
8263
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8264 #define XM_SB_MIN 1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8265 #define XM_SB_MAX 10000000
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8266 #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
8267
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8268
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8269 /* 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
8270 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
8271 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
8272
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8273 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8274 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
8275 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8276 XtPointer client_data, call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8277 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8278 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
8279 XmScrollBarCallbackStruct *cs = (XmScrollBarCallbackStruct *) call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8280 double percent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8281 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
8282
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8283 switch (cs->reason)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8284 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8285 case XmCR_DECREMENT:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8286 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8287 part = scroll_bar_up_arrow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8288 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8289
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8290 case XmCR_INCREMENT:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8291 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8292 part = scroll_bar_down_arrow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8293 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8294
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8295 case XmCR_PAGE_DECREMENT:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8296 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8297 part = scroll_bar_above_handle;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8298 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8299
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8300 case XmCR_PAGE_INCREMENT:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8301 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8302 part = scroll_bar_below_handle;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8303 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8304
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8305 case XmCR_TO_TOP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8306 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8307 part = scroll_bar_to_top;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8308 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8309
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8310 case XmCR_TO_BOTTOM:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8311 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8312 part = scroll_bar_to_bottom;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8313 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8314
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8315 case XmCR_DRAG:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8316 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8317 int slider_size;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8318 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
8319 && XINT (bar->dragging) <= cs->value);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8320
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8321 /* Get the slider size. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8322 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8323 XtVaGetValues (widget, XmNsliderSize, &slider_size, NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8324 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8325
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8326 /* At the max position of the scroll bar, do a line-wise
36772
a5012395e839 (x_set_toolkit_scroll_bar_thumb) [USE_MOTIF]: Don't
Gerd Moellmann <gerd@gnu.org>
parents: 36704
diff changeset
8327 movement. Without doing anything, we would be called with
a5012395e839 (x_set_toolkit_scroll_bar_thumb) [USE_MOTIF]: Don't
Gerd Moellmann <gerd@gnu.org>
parents: 36704
diff changeset
8328 the same cs->value again and again. If we want to make
a5012395e839 (x_set_toolkit_scroll_bar_thumb) [USE_MOTIF]: Don't
Gerd Moellmann <gerd@gnu.org>
parents: 36704
diff changeset
8329 sure that we can reach the end of the buffer, we have to do
a5012395e839 (x_set_toolkit_scroll_bar_thumb) [USE_MOTIF]: Don't
Gerd Moellmann <gerd@gnu.org>
parents: 36704
diff changeset
8330 something.
24991
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 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
8333 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
8334 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
8335 a better slider behavior. */
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 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
8338 || (dragging_down_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8339 && 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
8340 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8341 part = scroll_bar_down_arrow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8342 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8343 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8344 else
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 whole = XM_SB_RANGE;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8347 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
8348 part = scroll_bar_handle;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8349 bar->dragging = make_number (cs->value);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8350 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8351 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8352 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8353
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8354 case XmCR_VALUE_CHANGED:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8355 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8356 };
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8357
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8358 if (part >= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8359 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8360 window_being_scrolled = bar->window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8361 last_scroll_bar_part = part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8362 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
8363 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8364 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8365
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8366
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8367 #else /* !USE_MOTIF, i.e. Xaw. */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8368
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8369
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8370 /* 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
8371 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
8372 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
8373 the thumb is. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8374
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8375 static void
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8376 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
8377 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8378 XtPointer client_data, call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8379 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8380 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
8381 float top = *(float *) call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8382 float shown;
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8383 int whole, portion, height;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8384 int part;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8385
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8386 /* 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
8387 BLOCK_INPUT;
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8388 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
8389 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8390
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8391 whole = 10000000;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8392 portion = shown < 1 ? top * whole : 0;
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8393
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8394 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
8395 /* 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
8396 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
8397 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
8398 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
8399 bottom). */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8400 part = scroll_bar_down_arrow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8401 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8402 part = scroll_bar_handle;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8403
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8404 window_being_scrolled = bar->window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8405 bar->dragging = make_number (portion);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8406 last_scroll_bar_part = part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8407 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
8408 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8409
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8410
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8411 /* 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
8412 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
8413 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
8414 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
8415 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
8416 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
8417 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
8418
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8419 static void
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8420 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
8421 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8422 XtPointer client_data, call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8423 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8424 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
8425 int position = (int) call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8426 Dimension height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8427 int part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8428
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8429 /* 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
8430 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8431 XtVaGetValues (widget, XtNheight, &height, NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8432 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8433
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8434 if (abs (position) >= height)
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8435 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
8436
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8437 /* If Xaw3d was compiled with ARROW_SCROLLBAR,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8438 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
8439 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
8440 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
8441 else
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8442 part = scroll_bar_move_ratio;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8443
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8444 window_being_scrolled = bar->window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8445 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8446 last_scroll_bar_part = part;
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8447 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
8448 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8449
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8450
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8451 #endif /* not USE_MOTIF */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8452
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8453
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8454 /* 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
8455 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
8456
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8457 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8458 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
8459 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8460 struct scroll_bar *bar;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8461 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8462 Window xwindow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8463 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8464 Arg av[20];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8465 int ac = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8466 char *scroll_bar_name = "verticalScrollBar";
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8467 unsigned long pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8468
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8469 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8470
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8471 #ifdef USE_MOTIF
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8472 /* Set resources. Create the widget. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8473 XtSetArg (av[ac], XtNmappedWhenManaged, False); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8474 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
8475 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
8476 XtSetArg (av[ac], XmNorientation, XmVERTICAL); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8477 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
8478 XtSetArg (av[ac], XmNincrement, 1); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8479 XtSetArg (av[ac], XmNpageIncrement, 1); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8480
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8481 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
8482 if (pixel != -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8483 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8484 XtSetArg (av[ac], XmNforeground, pixel);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8485 ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8486 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8487
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8488 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
8489 if (pixel != -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8490 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8491 XtSetArg (av[ac], XmNbackground, pixel);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8492 ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8493 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8494
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8495 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
8496 scroll_bar_name, av, ac);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8497
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8498 /* 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
8499 XtAddCallback (widget, XmNdecrementCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8500 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8501 XtAddCallback (widget, XmNdragCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8502 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8503 XtAddCallback (widget, XmNincrementCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8504 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8505 XtAddCallback (widget, XmNpageDecrementCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8506 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8507 XtAddCallback (widget, XmNpageIncrementCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8508 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8509 XtAddCallback (widget, XmNtoBottomCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8510 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8511 XtAddCallback (widget, XmNtoTopCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8512 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8513
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8514 /* 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
8515 XtRealizeWidget (widget);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8516
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8517 /* 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
8518 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
8519 XDefineCursor (XtDisplay (widget), XtWindow (widget),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8520 f->output_data.x->nontext_cursor);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8521
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8522 #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
8523
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8524 /* 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
8525 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
8526 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
8527 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
8528 XtSetArg (av[ac], XtNmappedWhenManaged, False); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8529 XtSetArg (av[ac], XtNorientation, XtorientVertical); ++ac;
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8530 /* For smoother scrolling with Xaw3d -sm */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8531 /* XtSetArg (av[ac], XtNpickTop, True); ++ac; */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8532 /* 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
8533
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8534 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
8535 if (pixel != -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8536 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8537 XtSetArg (av[ac], XtNforeground, pixel);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8538 ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8539 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8540
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8541 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
8542 if (pixel != -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8543 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8544 XtSetArg (av[ac], XtNbackground, pixel);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8545 ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8546 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8547
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8548 widget = XtCreateWidget (scroll_bar_name, scrollbarWidgetClass,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8549 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
8550
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8551 {
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8552 char *initial = "";
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8553 char *val = initial;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8554 XtVaGetValues (widget, XtNscrollVCursor, (XtPointer) &val,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8555 XtNpickTop, (XtPointer) &xaw3d_pick_top, NULL);
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8556 if (val == initial)
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8557 { /* ARROW_SCROLL */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8558 xaw3d_arrow_scroll = True;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8559 /* 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
8560 XtVaSetValues (widget, XtNcursorName, "top_left_arrow", NULL);
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8561 }
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8562 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8563
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8564 /* Define callbacks. */
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8565 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
8566 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
8567 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8568
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8569 /* 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
8570 XtRealizeWidget (widget);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8571
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8572 #endif /* !USE_MOTIF */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8573
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8574 /* 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
8575 finishes interacting with a scroll bar. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8576 if (action_hook_id == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8577 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
8578
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8579 /* 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
8580 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
8581 xwindow = XtWindow (widget);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8582 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
8583
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8584 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8585 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8586
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8587
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8588 /* 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
8589 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
8590
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8591 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8592 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
8593 struct scroll_bar *bar;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8594 int portion, position, whole;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8595 {
33606
01f87b0ff56f (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
Gerd Moellmann <gerd@gnu.org>
parents: 33456
diff changeset
8596 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
8597 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
8598 float top, shown;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8599
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8600 if (whole == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8601 top = 0, shown = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8602 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8603 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8604 top = (float) position / whole;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8605 shown = (float) portion / whole;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8606 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8607
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8608 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8609
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8610 #ifdef USE_MOTIF
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8611 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8612 int size, value;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8613 XmScrollBarWidget sb;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8614
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8615 /* 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
8616 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
8617 value. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8618 size = shown * XM_SB_RANGE;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8619 size = min (size, XM_SB_RANGE);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8620 size = max (size, 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8621
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8622 /* 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
8623 value = top * XM_SB_RANGE;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8624 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
8625 value = max (value, XM_SB_MIN);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8626
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8627 if (NILP (bar->dragging))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8628 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
8629 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
8630 /* 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
8631 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
8632 page-wise movement. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8633 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
8634 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8635 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8636 /* 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
8637 This reduces flicker effects. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8638 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
8639
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8640 XmScrollBarGetValues (widget, &old_value, &old_size,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8641 &increment, &page_increment);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8642 XmScrollBarSetValues (widget, old_value,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8643 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
8644 0, 0, False);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8645 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8646 }
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8647 #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
8648 {
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8649 float old_top, old_shown;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8650 Dimension height;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8651 XtVaGetValues (widget,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8652 XtNtopOfThumb, &old_top,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8653 XtNshown, &old_shown,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8654 XtNheight, &height,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8655 NULL);
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8656
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8657 /* Massage the top+shown values. */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8658 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
8659 top = max (0, min (1, top));
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8660 else
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8661 top = old_top;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8662 /* 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
8663 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
8664
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8665 /* 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
8666 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
8667 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
8668 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
8669 {
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8670 if (NILP (bar->dragging))
25101
6b42357f28f9 (x_set_toolkit_scroll_bar_thumb): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents: 25091
diff changeset
8671 XawScrollbarSetThumb (widget, top, shown);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8672 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8673 {
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8674 #ifdef HAVE_XAW3D
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8675 ScrollbarWidget sb = (ScrollbarWidget) widget;
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
8676 int scroll_mode = 0;
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8677
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8678 /* `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
8679 if (xaw3d_arrow_scroll)
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8680 {
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8681 /* Xaw3d stupidly ignores resize requests while dragging
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8682 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
8683 scroll_mode = sb->scrollbar.scroll_mode;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8684 if (scroll_mode == 2)
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8685 sb->scrollbar.scroll_mode = 0;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8686 }
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8687 #endif
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8688 /* 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
8689 if (!xaw3d_pick_top)
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8690 shown = min (shown, old_shown);
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8691
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8692 XawScrollbarSetThumb (widget, top, shown);
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8693
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8694 #ifdef HAVE_XAW3D
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8695 if (xaw3d_arrow_scroll && scroll_mode == 2)
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8696 sb->scrollbar.scroll_mode = scroll_mode;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8697 #endif
24991
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 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8700 }
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8701 #endif /* !USE_MOTIF */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8702
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8703 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8704 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8705
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8706 #endif /* USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8707
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8710 /************************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8711 Scroll bars, general
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8712 ************************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8713
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8714 /* 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
8715 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
8716 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
8717 scroll bar. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8718
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8719 static struct scroll_bar *
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8720 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
8721 struct window *w;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8722 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
8723 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8724 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
8725 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
8726 = 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
8727
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8728 BLOCK_INPUT;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8729
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
8730 #ifdef USE_TOOLKIT_SCROLL_BARS
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8731 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
8732 #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
8733 {
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8734 XSetWindowAttributes a;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8735 unsigned long mask;
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8736 Window window;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8737
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8738 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
8739 if (a.background_pixel == -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8740 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
8741
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8742 a.event_mask = (ButtonPressMask | ButtonReleaseMask
1793
cf4c3f01ddb9 * xterm.c (x_scrollbar_create): Include PointerMotionHintMask in
Jim Blandy <jimb@redhat.com>
parents: 1787
diff changeset
8743 | ButtonMotionMask | PointerMotionHintMask
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8744 | ExposureMask);
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8745 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
8746
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8747 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
8748
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8749 /* 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
8750 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
8751 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
8752 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
8753 left, top, width,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
8754 window_box_height (w), False);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8755
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8756 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
8757 /* Position and size of scroll bar. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8758 left + VERTICAL_SCROLL_BAR_WIDTH_TRIM,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8759 top,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8760 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
8761 height,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8762 /* Border width, depth, class, and visual. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8763 0,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8764 CopyFromParent,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8765 CopyFromParent,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8766 CopyFromParent,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8767 /* Attributes. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8768 mask, &a);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8769 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
8770 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8771 #endif /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8772
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8773 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
8774 XSETINT (bar->top, top);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8775 XSETINT (bar->left, left);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8776 XSETINT (bar->width, width);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8777 XSETINT (bar->height, height);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8778 XSETINT (bar->start, 0);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8779 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
8780 bar->dragging = Qnil;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8781
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8782 /* 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
8783 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
8784 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
8785 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
8786 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
8787 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
8788
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8789 /* Map the window/widget. */
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
8790 #ifdef USE_TOOLKIT_SCROLL_BARS
36475
488c4787ec0a (XTset_vertical_scroll_bar): Don't clear a zero height
Gerd Moellmann <gerd@gnu.org>
parents: 36442
diff changeset
8791 {
488c4787ec0a (XTset_vertical_scroll_bar): Don't clear a zero height
Gerd Moellmann <gerd@gnu.org>
parents: 36442
diff changeset
8792 Widget scroll_bar = SCROLL_BAR_X_WIDGET (FRAME_X_DISPLAY (f), bar);
488c4787ec0a (XTset_vertical_scroll_bar): Don't clear a zero height
Gerd Moellmann <gerd@gnu.org>
parents: 36442
diff changeset
8793 XtConfigureWidget (scroll_bar,
488c4787ec0a (XTset_vertical_scroll_bar): Don't clear a zero height
Gerd Moellmann <gerd@gnu.org>
parents: 36442
diff changeset
8794 left + VERTICAL_SCROLL_BAR_WIDTH_TRIM,
488c4787ec0a (XTset_vertical_scroll_bar): Don't clear a zero height
Gerd Moellmann <gerd@gnu.org>
parents: 36442
diff changeset
8795 top,
488c4787ec0a (XTset_vertical_scroll_bar): Don't clear a zero height
Gerd Moellmann <gerd@gnu.org>
parents: 36442
diff changeset
8796 width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2,
488c4787ec0a (XTset_vertical_scroll_bar): Don't clear a zero height
Gerd Moellmann <gerd@gnu.org>
parents: 36442
diff changeset
8797 max (height, 1), 0);
488c4787ec0a (XTset_vertical_scroll_bar): Don't clear a zero height
Gerd Moellmann <gerd@gnu.org>
parents: 36442
diff changeset
8798 XtMapWidget (scroll_bar);
488c4787ec0a (XTset_vertical_scroll_bar): Don't clear a zero height
Gerd Moellmann <gerd@gnu.org>
parents: 36442
diff changeset
8799 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8800 #else /* not USE_TOOLKIT_SCROLL_BARS */
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
8801 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
8802 #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
8803
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8804 UNBLOCK_INPUT;
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8805 return bar;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8806 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8807
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8808
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8809 /* 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
8810
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8811 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
8812 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
8813 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
8814 events.)
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8815
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8816 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
8817 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
8818 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
8819 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
8820 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
8821
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8822 #ifndef USE_TOOLKIT_SCROLL_BARS
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8823
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8824 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8825 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
8826 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
8827 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
8828 int rebuild;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8829 {
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8830 int dragging = ! NILP (bar->dragging);
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8831 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
8832 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
8833 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
8834
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8835 /* 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
8836 if (! rebuild
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8837 && 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
8838 && 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
8839 return;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8840
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8841 BLOCK_INPUT;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8842
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8843 {
16251
ec1b1ae37295 Pass frame arg in calls to VERTICAL_SCROLL_BAR_INSIDE_HEIGHT
Richard M. Stallman <rms@gnu.org>
parents: 16220
diff changeset
8844 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
8845 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
8846 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
8847
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8848 /* 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
8849 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
8850 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8851 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
8852
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8853 if (start < 0)
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8854 start = 0;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8855 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
8856 start = top_range;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8857 end = start + length;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8858
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8859 if (end < start)
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8860 end = start;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8861 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
8862 end = top_range;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8863 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8864
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8865 /* 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
8866 XSETINT (bar->start, start);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8867 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
8868
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8869 /* 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
8870 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
8871 end = top_range;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8872
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8873 /* 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
8874 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
8875 that many pixels tall. */
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8876 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
8877
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8878 /* 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
8879 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
8880 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
8881 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
8882 /* 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
8883 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
8884 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
8885 inside_width, start,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
8886 False);
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8887
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8888 /* 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
8889 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
8890 XSetForeground (FRAME_X_DISPLAY (f), gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8891 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
8892
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8893 /* 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
8894 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
8895 /* x, y, width, height */
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8896 VERTICAL_SCROLL_BAR_LEFT_BORDER,
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8897 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
8898 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
8899
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8900 /* 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
8901 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
8902 XSetForeground (FRAME_X_DISPLAY (f), gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8903 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
8904
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8905 /* 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
8906 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
8907 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
8908 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
8909 /* 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
8910 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
8911 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
8912 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
8913 False);
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8914
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8915 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8916
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8917 UNBLOCK_INPUT;
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8918 }
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8919
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8920 #endif /* !USE_TOOLKIT_SCROLL_BARS */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8921
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8922 /* 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
8923 nil. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8924
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8925 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8926 x_scroll_bar_remove (bar)
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8927 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
8928 {
33606
01f87b0ff56f (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
Gerd Moellmann <gerd@gnu.org>
parents: 33456
diff changeset
8929 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
8930 BLOCK_INPUT;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8931
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
8932 #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
8933 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
8934 #else
01f87b0ff56f (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
Gerd Moellmann <gerd@gnu.org>
parents: 33456
diff changeset
8935 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
8936 #endif
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8937
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8938 /* 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
8939 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
8940
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8941 UNBLOCK_INPUT;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8942 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8943
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8944
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8945 /* 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
8946 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
8947 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
8948 create one. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8949
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8950 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8951 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
8952 struct window *w;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8953 int portion, whole, position;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8954 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8955 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
8956 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
8957 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
8958 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
8959
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8960 /* Get window dimensions. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8961 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
8962 top = window_y;
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8963 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
8964 height = window_height;
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8965
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8966 /* 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
8967 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
8968 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
8969 else
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8970 left = XFASTINT (w->left);
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8971 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
8972 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
8973
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8974 /* 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
8975 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
8976 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
8977 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
8978 else
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8979 sb_width = width;
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8980
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8981 /* 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
8982 #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
8983 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
8984 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
8985 else
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8986 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
8987 #else
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8988 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
8989 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
8990 else
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8991 sb_left = left;
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8992 #endif
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8993
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8994 /* 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
8995 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
8996 {
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
8997 BLOCK_INPUT;
36475
488c4787ec0a (XTset_vertical_scroll_bar): Don't clear a zero height
Gerd Moellmann <gerd@gnu.org>
parents: 36442
diff changeset
8998 if (width && height)
488c4787ec0a (XTset_vertical_scroll_bar): Don't clear a zero height
Gerd Moellmann <gerd@gnu.org>
parents: 36442
diff changeset
8999 x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
488c4787ec0a (XTset_vertical_scroll_bar): Don't clear a zero height
Gerd Moellmann <gerd@gnu.org>
parents: 36442
diff changeset
9000 left, top, width, height, False);
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
9001 UNBLOCK_INPUT;
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
9002 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
9003 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9004 else
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9005 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9006 /* 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
9007 unsigned int mask = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9008
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9009 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
9010
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9011 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9012
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
9013 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
9014 mask |= CWX;
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
9015 if (top != XINT (bar->top))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9016 mask |= CWY;
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
9017 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
9018 mask |= CWWidth;
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
9019 if (height != XINT (bar->height))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9020 mask |= CWHeight;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9021
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9022 #ifdef USE_TOOLKIT_SCROLL_BARS
25269
621067279f19 (XTset_vertical_scroll_bar) [USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 25191
diff changeset
9023
621067279f19 (XTset_vertical_scroll_bar) [USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 25191
diff changeset
9024 /* 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
9025 for them on the frame, we have to clear "under" them. */
36475
488c4787ec0a (XTset_vertical_scroll_bar): Don't clear a zero height
Gerd Moellmann <gerd@gnu.org>
parents: 36442
diff changeset
9026 if (width && height)
488c4787ec0a (XTset_vertical_scroll_bar): Don't clear a zero height
Gerd Moellmann <gerd@gnu.org>
parents: 36442
diff changeset
9027 x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
488c4787ec0a (XTset_vertical_scroll_bar): Don't clear a zero height
Gerd Moellmann <gerd@gnu.org>
parents: 36442
diff changeset
9028 left, top, width, height, False);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9029
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9030 /* Move/size the scroll bar widget. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9031 if (mask)
33606
01f87b0ff56f (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
Gerd Moellmann <gerd@gnu.org>
parents: 33456
diff changeset
9032 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
9033 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
9034 top,
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
9035 sb_width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2,
36475
488c4787ec0a (XTset_vertical_scroll_bar): Don't clear a zero height
Gerd Moellmann <gerd@gnu.org>
parents: 36442
diff changeset
9036 max (height, 1), 0);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9037
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9038 #else /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9039
36880
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
9040 /* Clear areas not covered by the scroll bar because of
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
9041 VERTICAL_SCROLL_BAR_WIDTH_TRIM. */
25633
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
9042 if (VERTICAL_SCROLL_BAR_WIDTH_TRIM)
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
9043 {
35581
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
9044 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
9045 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
9046 height, False);
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
9047 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
9048 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
9049 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
9050 height, False);
25633
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
9051 }
36880
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
9052
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
9053 /* Clear areas not covered by the scroll bar because it's not as
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
9054 wide as the area reserved for it . This makes sure a
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
9055 previous mode line display is cleared after C-x 2 C-x 1, for
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
9056 example. */
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
9057 {
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
9058 int area_width = FRAME_SCROLL_BAR_COLS (f) * CANON_X_UNIT (f);
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
9059 int rest = area_width - sb_width;
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
9060 if (rest > 0)
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
9061 x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
9062 left + area_width - rest, 0,
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
9063 rest, max (height, 1), False);
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
9064 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9065
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9066 /* Move/size the scroll bar window. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9067 if (mask)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9068 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9069 XWindowChanges wc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9070
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
9071 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
9072 wc.y = top;
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
9073 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
9074 wc.height = height;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9075 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
9076 mask, &wc);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9077 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9078
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9079 #endif /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9080
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9081 /* Remember new settings. */
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
9082 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
9083 XSETINT (bar->top, top);
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
9084 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
9085 XSETINT (bar->height, height);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9086
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9087 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9088 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9089
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
9090 #ifdef USE_TOOLKIT_SCROLL_BARS
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9091 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
9092 #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
9093 /* 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
9094 dragged. */
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9095 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
9096 {
25541
be975dcf4a0c (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 25529
diff changeset
9097 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
9098
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9099 if (whole == 0)
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9100 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
9101 else
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9102 {
3686
910ea1d66bfd * xterm.c (XTset_vertical_scroll_bar): Use double type for
Jim Blandy <jimb@redhat.com>
parents: 3683
diff changeset
9103 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
9104 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
9105 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
9106 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9107 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9108 #endif /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9109
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9110 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
9111 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9112
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9113
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9114 /* 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
9115 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
9116 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
9117 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
9118 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
9119 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
9120 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
9121
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9122 /* 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
9123 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
9124 `*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
9125
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
9126 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9127 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
9128 FRAME_PTR frame;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9129 {
13205
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
9130 /* 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
9131 while (! NILP (FRAME_SCROLL_BARS (frame)))
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
9132 {
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
9133 Lisp_Object bar;
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
9134 bar = FRAME_SCROLL_BARS (frame);
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
9135 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
9136 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
9137 XSCROLL_BAR (bar)->prev = Qnil;
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
9138 if (! NILP (FRAME_CONDEMNED_SCROLL_BARS (frame)))
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
9139 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
9140 FRAME_CONDEMNED_SCROLL_BARS (frame) = bar;
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
9141 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9142 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9143
33303
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
9144
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9145 /* 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
9146 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
9147
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9148 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9149 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
9150 struct window *window;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9151 {
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9152 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
9153 struct frame *f;
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9154
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9155 /* 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
9156 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
9157 abort ();
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9158
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9159 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
9160
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9161 /* 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
9162 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
9163 if (NILP (bar->prev))
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
9164 {
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
9165 /* 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
9166 the lists. */
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
9167 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
9168 /* 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
9169 return;
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
9170 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
9171 window->vertical_scroll_bar))
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
9172 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
9173 else
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
9174 /* 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
9175 one or the other! */
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
9176 abort ();
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
9177 }
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
9178 else
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
9179 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
9180
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
9181 if (! NILP (bar->next))
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
9182 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
9183
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
9184 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
9185 bar->prev = Qnil;
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
9186 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
9187 if (! NILP (bar->next))
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
9188 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
9189 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9190
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9191 /* 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
9192 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
9193
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9194 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9195 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
9196 FRAME_PTR f;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9197 {
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9198 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
9199
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9200 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
9201
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
9202 /* 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
9203 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
9204 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
9205
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
9206 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
9207 {
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9208 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
9209
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9210 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
9211
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9212 next = b->next;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9213 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
9214 }
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9215
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9216 /* 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
9217 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
9218 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9219
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9220
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9221 /* 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
9222 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
9223
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9224 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
9225 mark bits. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9226
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9227 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9228 x_scroll_bar_expose (bar, event)
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9229 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
9230 XEvent *event;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9231 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9232 #ifndef USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9233
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9234 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
9235 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
9236 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
9237 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
9238
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9239 BLOCK_INPUT;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9240
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9241 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
9242
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9243 /* 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
9244 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
9245
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9246 /* 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
9247 0, 0,
16301
a02555b4b2b9 (x_scroll_bar_create, x_scroll_bar_move):
Richard M. Stallman <rms@gnu.org>
parents: 16251
diff changeset
9248 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
9249 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
9250
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9251 UNBLOCK_INPUT;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9252
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9253 #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
9254 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9255
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9256 /* 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
9257 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
9258
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9259 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
9260 mark bits. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9261
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
9262 #ifndef USE_TOOLKIT_SCROLL_BARS
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
9263
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9264 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9265 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
9266 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
9267 XEvent *event;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9268 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
9269 {
10287
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
9270 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
9271 abort ();
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9272
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9273 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
9274 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
9275 emacs_event->modifiers
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
9276 = (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
9277 (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
9278 event->xbutton.state)
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
9279 | (event->type == ButtonRelease
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
9280 ? up_modifier
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
9281 : down_modifier));
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9282 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
9283 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
9284 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
9285 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9286 #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
9287 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
9288 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
9289 = 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
9290 #endif
10287
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
9291 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
9292 = 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
9293 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
9294
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9295 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
9296 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
9297
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9298 if (y < XINT (bar->start))
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9299 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
9300 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
9301 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
9302 else
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9303 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
9304
5440f00480e6 * xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents: 2923
diff changeset
9305 /* 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
9306 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
9307 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
9308 #if 0
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9309 /* 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
9310 holding it. */
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9311 if (event->type == ButtonPress
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9312 && 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
9313 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
9314 #endif
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9315
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9316 /* 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
9317 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
9318 && ! NILP (bar->dragging))
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9319 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9320 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
9321 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
9322
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9323 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
9324 bar->dragging = Qnil;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9325 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9326
2958
3124e6244d1a * xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents: 2953
diff changeset
9327 /* 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
9328 #if 0
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
9329 /* 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
9330 the handle. */
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9331 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
9332 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
9333 else
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
9334 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
9335 #else
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
9336 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
9337 #endif
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9338
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
9339 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
9340 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9341 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9342
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9343 /* 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
9344
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9345 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
9346 mark bits. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9347
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9348 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9349 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
9350 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
9351 XEvent *event;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9352 {
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
9353 FRAME_PTR f = XFRAME (XWINDOW (bar->window)->frame);
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
9354
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9355 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
9356
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
9357 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
9358 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
9359
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9360 /* 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
9361 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
9362 {
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9363 /* 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
9364 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
9365
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9366 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
9367 {
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9368 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
9369
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9370 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
9371 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9372 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9373 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9374
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
9375 #endif /* !USE_TOOLKIT_SCROLL_BARS */
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
9376
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9377 /* 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
9378 on the scroll bar. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9379
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9380 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
9381 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
9382 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
9383 Lisp_Object *bar_window;
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9384 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
9385 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
9386 unsigned long *time;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9387 {
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9388 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
9389 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
9390 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
9391 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
9392 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
9393 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
9394 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
9395
1803
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
9396 BLOCK_INPUT;
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
9397
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9398 /* 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
9399 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
9400 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
9401
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
9402 /* 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
9403 &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
9404 &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
9405
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
9406 /* 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
9407 &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
9408
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
9409 /* 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
9410 &dummy_mask))
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9411 ;
2982
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
9412 else
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
9413 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9414 #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
9415 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
9416 = 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
9417 #endif
2982
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
9418 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
9419 = 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
9420
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
9421 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
9422
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
9423 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
9424 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
9425
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
9426 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
9427 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
9428 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
9429 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
9430
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
9431 *fp = f;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9432 *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
9433
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
9434 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
9435 *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
9436 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
9437 *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
9438 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
9439 *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
9440 else
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
9441 *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
9442
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
9443 XSETINT (*x, win_y);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
9444 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
9445
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
9446 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
9447 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
9448 }
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
9449
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
9450 *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
9451
1803
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
9452 UNBLOCK_INPUT;
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9453 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
9454
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9455
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
9456 /* 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
9457 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
9458 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
9459 redraw them. */
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
9460
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
9461 void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
9462 x_scroll_bar_clear (f)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
9463 FRAME_PTR f;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
9464 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9465 #ifndef USE_TOOLKIT_SCROLL_BARS
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
9466 Lisp_Object bar;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
9467
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
9468 /* 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
9469 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
9470 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
9471 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
9472 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
9473 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
9474 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
9475 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
9476 0, 0, 0, 0, True);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9477 #endif /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9478 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9479
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9480 /* 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
9481 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
9482 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
9483
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9484 int
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9485 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
9486 XEvent event;
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9487 {
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9488 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
9489 struct x_display_info *dpyinfo;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9490 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
9491
5872
6389c826f847 (x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents: 5825
diff changeset
9492 BLOCK_INPUT;
6389c826f847 (x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents: 5825
diff changeset
9493
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
9494 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
9495 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
9496 if (f)
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9497 {
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9498 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
9499 {
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9500 f->async_visible = 1;
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9501 f->async_iconified = 0;
18074
06e42aa4c208 (process_expose_from_menu, XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 18057
diff changeset
9502 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
9503 SET_FRAME_GARBAGED (f);
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9504 }
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9505 else
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9506 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9507 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
9508 event.xexpose.x, event.xexpose.y,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9509 event.xexpose.width, event.xexpose.height);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9510 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
9511 }
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9512 }
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9513 else
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9514 {
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9515 struct scroll_bar *bar
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9516 = x_window_to_scroll_bar (event.xexpose.window);
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
9517
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9518 if (bar)
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9519 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
9520 }
5872
6389c826f847 (x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents: 5825
diff changeset
9521
6389c826f847 (x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents: 5825
diff changeset
9522 UNBLOCK_INPUT;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9523 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
9524 }
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9525
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9526 /* 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
9527
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9528 struct selection_event_queue
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9529 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9530 XEvent event;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9531 struct selection_event_queue *next;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9532 };
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9533
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9534 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
9535
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9536 /* 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
9537
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9538 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
9539
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9540 /* 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
9541
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9542 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
9543 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
9544 FRAME_PTR f;
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9545 XEvent *event;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9546 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9547 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
9548 = (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
9549
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
9550 if (queue_tmp != NULL)
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9551 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9552 queue_tmp->event = *event;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9553 queue_tmp->next = queue;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9554 queue = queue_tmp;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9555 }
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9556 }
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9557
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9558 /* 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
9559 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
9560
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9561 static void
10634
de7beeb9f02c (x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents: 10609
diff changeset
9562 x_unqueue_events (display)
de7beeb9f02c (x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents: 10609
diff changeset
9563 Display *display;
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9564 {
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
9565 while (queue != NULL)
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9566 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9567 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
9568 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
9569 queue = queue_tmp->next;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9570 xfree ((char *)queue_tmp);
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9571 }
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9572 }
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9573
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9574 /* Start queuing SelectionRequest events. */
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9575
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9576 void
10634
de7beeb9f02c (x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents: 10609
diff changeset
9577 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
9578 Display *display;
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9579 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9580 x_queue_selection_requests++;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9581 }
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9582
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9583 /* Stop queuing SelectionRequest events. */
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9584
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9585 void
10634
de7beeb9f02c (x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents: 10609
diff changeset
9586 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
9587 Display *display;
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9588 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9589 x_queue_selection_requests--;
10634
de7beeb9f02c (x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents: 10609
diff changeset
9590 x_unqueue_events (display);
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
9591 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9592
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9593 /* The main X event-reading loop - XTread_socket. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9594
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9595 /* 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
9596 but we have to put it out here, since static variables within functions
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9597 sometimes don't work. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9598
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9599 static Time enter_timestamp;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9600
1436
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
9601 /* 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
9602 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
9603 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
9604 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
9605
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
9606 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
9607 given for enter_time stamp, above. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9608
1436
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
9609 static XComposeStatus compose_status;
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
9610
2064
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
9611 /* Record the last 100 characters stored
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
9612 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
9613
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
9614 static int temp_index;
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
9615 static short temp_buffer[100];
2064
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
9616
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9617 /* 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
9618 on a particular display. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9619
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9620 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
9621
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
9622 /* 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
9623 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
9624 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
9625 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
9626
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
9627 static struct x_display_info *next_noop_dpyinfo;
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
9628
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9629 #define SET_SAVED_MENU_EVENT(size) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9630 do \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9631 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9632 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
9633 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
9634 = (XEvent *) xmalloc (sizeof (XEvent)); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9635 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
9636 if (numchars >= 1) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9637 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9638 bufp->kind = menu_bar_activate_event; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9639 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
9640 bufp->arg = Qnil; \
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9641 bufp++; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9642 count++; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9643 numchars--; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9644 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9645 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9646 while (0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9647
15711
099dc465c948 (SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents: 15639
diff changeset
9648 #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
9649 #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
9650
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9651 /* Read events coming from the X server.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9652 This routine is called by the SIGIO handler.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9653 We return as soon as there are no more events to be read.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9654
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9655 Events representing keys are stored in buffer BUFP,
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9656 which can hold up to NUMCHARS characters.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9657 We return the number of characters stored into the buffer,
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9658 thus pretending to be `read'.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9659
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9660 EXPECTED is nonzero if the caller knows input is available. */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9661
1530
a7f8a1fe258e * xterm.c (x_convert_modifiers): Declare this to return an
Jim Blandy <jimb@redhat.com>
parents: 1436
diff changeset
9662 int
16330
e4d9d77012bc (XTread_socket): Delete WAITP arg.
Richard M. Stallman <rms@gnu.org>
parents: 16301
diff changeset
9663 XTread_socket (sd, bufp, numchars, expected)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9664 register int sd;
15711
099dc465c948 (SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents: 15639
diff changeset
9665 /* register */ struct input_event *bufp;
099dc465c948 (SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents: 15639
diff changeset
9666 /* register */ int numchars;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9667 int expected;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9668 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9669 int count = 0;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9670 int nbytes = 0;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9671 XEvent event;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
9672 struct frame *f;
3938
83d870a52936 * xterm.c (XTread_socket): Initialize event_found to zero, and
Jim Blandy <jimb@redhat.com>
parents: 3924
diff changeset
9673 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
9674 struct x_display_info *dpyinfo;
30748
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9675 struct coding_system coding;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9676
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2353
diff changeset
9677 if (interrupt_input_blocked)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9678 {
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2353
diff changeset
9679 interrupt_input_pending = 1;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9680 return -1;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9681 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9682
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2353
diff changeset
9683 interrupt_input_pending = 0;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9684 BLOCK_INPUT;
9337
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
9685
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
9686 /* 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
9687 input_signal_count++;
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
9688
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9689 if (numchars <= 0)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9690 abort (); /* Don't think this happens. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9691
30083
998d20abc885 (XTread_socket): Increment handling_signal at the start,
Gerd Moellmann <gerd@gnu.org>
parents: 30050
diff changeset
9692 ++handling_signal;
998d20abc885 (XTread_socket): Increment handling_signal at the start,
Gerd Moellmann <gerd@gnu.org>
parents: 30050
diff changeset
9693
30748
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9694 /* 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
9695 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
9696 Vlocale_coding_system which is initialized properly at Emacs
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9697 startup time. */
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9698 setup_coding_system (Vlocale_coding_system, &coding);
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9699 coding.src_multibyte = 0;
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9700 coding.dst_multibyte = 1;
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9701 /* The input is converted to events, thus we can't handle
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9702 composition. Anyway, there's no XIM that gives us composition
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9703 information. */
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9704 coding.composing = COMPOSITION_DISABLED;
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
9705
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9706 /* 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
9707 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
9708 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
9709 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9710 #if 0 /* This ought to be unnecessary; let's verify it. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9711 #ifdef FIOSNBIO
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9712 /* 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
9713 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
9714 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
9715 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
9716 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
9717 #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
9718 #endif
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9719
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9720 #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
9721 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
9722 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
9723 for X connections. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9724 #ifndef SIGIO
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9725 #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
9726 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
9727 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9728 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
9729 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
9730 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
9731 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
9732 }
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
9733 #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
9734 #endif /* SIGIO */
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9735 #endif
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9736
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9737 /* 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
9738 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
9739 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9740 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
9741 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
9742 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9743
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9744 while (XPending (dpyinfo->display))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9745 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9746 XNextEvent (dpyinfo->display, &event);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9747
15973
6ad9e8fee494 (XTread_socket): Call XFilterEvent on all events,
Richard M. Stallman <rms@gnu.org>
parents: 15928
diff changeset
9748 #ifdef HAVE_X_I18N
15990
1185f8fc0bfb (do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents: 15973
diff changeset
9749 {
26968
3039d2412c9e (XTread_socket): At the beginning of the loop, pass the
Gerd Moellmann <gerd@gnu.org>
parents: 26912
diff changeset
9750 /* 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
9751 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
9752 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
9753 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
9754 was created. */
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9755 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
9756 event.xclient.window);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9757 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
9758 break;
1185f8fc0bfb (do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents: 15973
diff changeset
9759 }
15973
6ad9e8fee494 (XTread_socket): Call XFilterEvent on all events,
Richard M. Stallman <rms@gnu.org>
parents: 15928
diff changeset
9760 #endif
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9761 event_found = 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9762
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9763 switch (event.type)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9764 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9765 case ClientMessage:
642
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
9766 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9767 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
9768 == 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
9769 && event.xclient.format == 32)
642
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
9770 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9771 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
9772 == 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
9773 {
18885
f7b6579204b8 (XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents: 18775
diff changeset
9774 /* Use x_any_window_to_frame because this
f7b6579204b8 (XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents: 18775
diff changeset
9775 could be the shell widget window
f7b6579204b8 (XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents: 18775
diff changeset
9776 if the frame has no title bar. */
f7b6579204b8 (XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents: 18775
diff changeset
9777 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
9778 #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
9779 /* Not quite sure this is needed -pd */
18885
f7b6579204b8 (XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents: 18775
diff changeset
9780 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
9781 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
9782 #endif
25921
eb5839cbfb16 (XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents: 25795
diff changeset
9783 #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
9784 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
9785 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
9786 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
9787 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
9788 needed.
eb5839cbfb16 (XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents: 25795
diff changeset
9789
eb5839cbfb16 (XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents: 25795
diff changeset
9790 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
9791 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
9792 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
9793 below can generate additional FocusIn events which confuse
eb5839cbfb16 (XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents: 25795
diff changeset
9794 Emacs. */
eb5839cbfb16 (XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents: 25795
diff changeset
9795
18996
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9796 /* 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
9797 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
9798 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
9799 if (f)
18996
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9800 {
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9801 Display *d = event.xclient.display;
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9802 /* 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
9803 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
9804 int count = x_catch_errors (d);
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9805 XSetInputFocus (d, event.xclient.window,
25633
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
9806 /* The ICCCM says this is
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
9807 the only valid choice. */
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
9808 RevertToParent,
18996
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9809 event.xclient.data.l[1]);
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9810 /* 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
9811 if there is an error. */
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9812 XSync (d, False);
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9813 x_uncatch_errors (d, count);
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9814 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9815 /* Not certain about handling scroll bars here */
25921
eb5839cbfb16 (XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents: 25795
diff changeset
9816 #endif /* 0 */
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9817 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9818 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
9819 == dpyinfo->Xatom_wm_save_yourself)
642
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
9820 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9821 /* 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
9822 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
9823 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
9824 PropertyNotify. Can restart processing when
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9825 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
9826 if (numchars > 0)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9827 {
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
9828 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
9829 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
9830
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9831 /* 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
9832 for a single Emacs process. */
25682
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
9833 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
9834 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
9835 event.xclient.window,
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9836 initial_argv, initial_argc);
15519
045a36502ad4 (XTread_socket, Xatom_wm_save_yourself clause):
Richard M. Stallman <rms@gnu.org>
parents: 15515
diff changeset
9837 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
9838 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
9839 event.xclient.window,
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9840 0, 0);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9841 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9842 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9843 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
9844 == 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
9845 {
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
9846 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
9847 = 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
9848 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
9849
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9850 if (f)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9851 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9852 if (numchars == 0)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9853 abort ();
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9854
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9855 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
9856 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
9857 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
9858 bufp++;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9859
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9860 count += 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9861 numchars -= 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9862 }
642
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
9863 }
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
9864 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9865 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
9866 == dpyinfo->Xatom_wm_configure_denied)
642
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
9867 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9868 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9869 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
9870 == 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
9871 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9872 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
9873 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
9874 = 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
9875
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9876 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
9877 new_y = event.xclient.data.s[1];
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
9878
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
9879 if (f)
5156
fd78458b8c43 (XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents: 5018
diff changeset
9880 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
9881 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
9882 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
9883 }
642
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
9884 }
13507
9a9f459075af (HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
9885 #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
9886 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
9887 == dpyinfo->Xatom_editres)
5156
fd78458b8c43 (XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents: 5018
diff changeset
9888 {
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
9889 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
9890 = 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
9891 _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
9892 &event, NULL);
5156
fd78458b8c43 (XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents: 5018
diff changeset
9893 }
13507
9a9f459075af (HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
9894 #endif /* HACK_EDITRES */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9895 else if ((event.xclient.message_type
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9896 == dpyinfo->Xatom_DONE)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9897 || (event.xclient.message_type
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9898 == dpyinfo->Xatom_PAGE))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9899 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9900 /* 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
9901 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
9902 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
9903 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
9904 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
9905 struct frame *f
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9906 = 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
9907 x_kill_gs_process (pixmap, f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9908 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
9909 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9910 #ifdef USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9911 /* 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
9912 we construct an input_event. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9913 else if (event.xclient.message_type
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9914 == dpyinfo->Xatom_Scrollbar)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9915 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9916 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
9917 ++bufp, ++count, --numchars;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9918 goto out;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9919 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9920 #endif /* USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9921 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9922 goto OTHER;
642
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
9923 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9924 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9925
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9926 case SelectionNotify:
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9927 #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
9928 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
9929 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9930 #endif /* not USE_X_TOOLKIT */
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
9931 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
9932 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9933
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9934 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
9935 #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
9936 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
9937 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9938 #endif /* USE_X_TOOLKIT */
6941
a914781ef58a (Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents: 6934
diff changeset
9939 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9940 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
9941
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9942 if (numchars == 0)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9943 abort ();
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9944
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9945 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
9946 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
9947 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
9948 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
9949 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
9950 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
9951 bufp++;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9952
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9953 count += 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9954 numchars -= 1;
6941
a914781ef58a (Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents: 6934
diff changeset
9955 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9956 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9957
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9958 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
9959 #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
9960 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
9961 goto OTHER;
6984
8e9465c13702 (XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents: 6983
diff changeset
9962 #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
9963 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
9964 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
9965 &event);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9966 else
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9967 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9968 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
9969
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9970 if (numchars == 0)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9971 abort ();
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9972
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9973 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
9974 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
9975 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
9976 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
9977 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
9978 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
9979 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
9980 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
9981 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
9982 bufp++;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9983
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9984 count += 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9985 numchars -= 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9986 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9987 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9988
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9989 case PropertyNotify:
6984
8e9465c13702 (XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents: 6983
diff changeset
9990 #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
9991 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
9992 goto OTHER;
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9993 #endif /* not USE_X_TOOLKIT */
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
9994 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
9995 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9996
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9997 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
9998 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
9999 if (f)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10000 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10001 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
10002 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
10003 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
10004 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
10005 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
10006 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10007 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10008
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10009 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
10010 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
10011 if (f)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10012 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10013 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
10014 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10015 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
10016 f->async_iconified = 0;
18074
06e42aa4c208 (process_expose_from_menu, XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 18057
diff changeset
10017 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
10018 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
10019 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10020 else
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10021 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
10022 event.xexpose.window),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10023 event.xexpose.x, event.xexpose.y,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10024 event.xexpose.width, event.xexpose.height);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10025 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10026 else
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10027 {
37558
21ed9ad15f92 (XTread_socket) <Expose> [!USE_TOOLKIT_SCROLL_BARS]: Fix
Eli Zaretskii <eliz@gnu.org>
parents: 37540
diff changeset
10028 #ifndef USE_TOOLKIT_SCROLL_BARS
21ed9ad15f92 (XTread_socket) <Expose> [!USE_TOOLKIT_SCROLL_BARS]: Fix
Eli Zaretskii <eliz@gnu.org>
parents: 37540
diff changeset
10029 struct scroll_bar *bar;
21ed9ad15f92 (XTread_socket) <Expose> [!USE_TOOLKIT_SCROLL_BARS]: Fix
Eli Zaretskii <eliz@gnu.org>
parents: 37540
diff changeset
10030 #endif
37525
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
10031 #if defined USE_X_TOOLKIT && defined USE_LUCID
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
10032 /* Submenus of the Lucid menu bar aren't widgets
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
10033 themselves, so there's no way to dispatch events
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
10034 to them. Recognize this case separately. */
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
10035 {
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
10036 Widget widget
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
10037 = x_window_to_menu_bar (event.xexpose.window);
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
10038 if (widget)
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
10039 xlwmenu_redisplay (widget);
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
10040 }
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
10041 #endif /* USE_X_TOOLKIT && USE_LUCID */
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
10042
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10043 #ifdef USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10044 /* Dispatch event to the widget. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10045 goto OTHER;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10046 #else /* not USE_TOOLKIT_SCROLL_BARS */
37558
21ed9ad15f92 (XTread_socket) <Expose> [!USE_TOOLKIT_SCROLL_BARS]: Fix
Eli Zaretskii <eliz@gnu.org>
parents: 37540
diff changeset
10047 bar = x_window_to_scroll_bar (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
10048
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10049 if (bar)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10050 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
10051 #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
10052 else
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10053 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10054 #endif /* USE_X_TOOLKIT */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10055 #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
10056 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10057 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10058
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10059 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
10060 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
10061 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
10062 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
10063 if (f)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10064 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10065 expose_frame (f,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10066 event.xgraphicsexpose.x, event.xgraphicsexpose.y,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10067 event.xgraphicsexpose.width,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10068 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
10069 }
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10070 #ifdef USE_X_TOOLKIT
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10071 else
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10072 goto OTHER;
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10073 #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
10074 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10075
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10076 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
10077 source area was completely
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10078 available */
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10079 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10080
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10081 case UnmapNotify:
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10082 /* 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
10083 if (event.xmap.window == tip_window)
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 tip_window = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10086 redo_mouse_highlight ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10087 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10088
12750
7e5276da6270 (XTread_socket): For UnmapNotify, use x_top_window_to_frame.
Richard M. Stallman <rms@gnu.org>
parents: 12667
diff changeset
10089 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
10090 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
10091 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
10092 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10093 /* 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
10094 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
10095 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
10096 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
10097 /* 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
10098 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
10099 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
10100 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
10101 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
10102 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
10103 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
10104 {
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
10105 f->async_iconified = 1;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
10106
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
10107 bufp->kind = iconify_event;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
10108 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
10109 bufp->arg = Qnil;
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
10110 bufp++;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
10111 count++;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
10112 numchars--;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
10113 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10114 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10115 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10116
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10117 case MapNotify:
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10118 if (event.xmap.window == tip_window)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10119 /* 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
10120 the SET_FRAME_GARBAGED below. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10121 goto OTHER;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10122
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10123 /* 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
10124 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
10125 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
10126 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
10127 if (f)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10128 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10129 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
10130 f->async_iconified = 0;
18074
06e42aa4c208 (process_expose_from_menu, XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 18057
diff changeset
10131 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
10132
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10133 /* 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
10134 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
10135 SET_FRAME_GARBAGED (f);
9823
e6dbda62fd61 (XTread_socket): Generate iconify and deiconify events.
Karl Heuer <kwzh@gnu.org>
parents: 9763
diff changeset
10136
11348
e366abc2c753 (XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents: 11259
diff changeset
10137 if (f->iconified)
e366abc2c753 (XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents: 11259
diff changeset
10138 {
e366abc2c753 (XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents: 11259
diff changeset
10139 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
10140 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
10141 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
10142 bufp++;
e366abc2c753 (XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents: 11259
diff changeset
10143 count++;
e366abc2c753 (XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents: 11259
diff changeset
10144 numchars--;
e366abc2c753 (XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents: 11259
diff changeset
10145 }
17519
5aa7011aa3d5 (x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents: 17371
diff changeset
10146 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
10147 && ! NILP (XCDR (Vframe_list)))
11921
6ecaa3fac4e4 (XTread_socket): For MapNotify, call record_asynch_buffer_change.
Karl Heuer <kwzh@gnu.org>
parents: 11915
diff changeset
10148 /* 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
10149 to update the frame titles
6ecaa3fac4e4 (XTread_socket): For MapNotify, call record_asynch_buffer_change.
Karl Heuer <kwzh@gnu.org>
parents: 11915
diff changeset
10150 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
10151 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
10152 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10153 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10154
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10155 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
10156 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
10157
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
10158 #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
10159 if (f == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10160 {
36774
a7358dadd49b [USE_TOOLKIT_SCROLL_BARS && USE_MOTIF]: Don't include
Gerd Moellmann <gerd@gnu.org>
parents: 36772
diff changeset
10161 /* Scroll bars consume key events, but we want
a7358dadd49b [USE_TOOLKIT_SCROLL_BARS && USE_MOTIF]: Don't include
Gerd Moellmann <gerd@gnu.org>
parents: 36772
diff changeset
10162 the keys to go to the scroll bar's frame. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10163 Widget widget = XtWindowToWidget (dpyinfo->display,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10164 event.xkey.window);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10165 if (widget && XmIsScrollBar (widget))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10166 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10167 widget = XtParent (widget);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10168 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
10169 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10170 }
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
10171 #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
10172
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10173 if (f != 0)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10174 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10175 KeySym keysym, orig_keysym;
30748
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10176 /* al%imercury@uunet.uu.net says that making this 81
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10177 instead of 80 fixed a bug whereby meta chars made
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10178 his Emacs hang.
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10179
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10180 It seems that some version of XmbLookupString has
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10181 a bug of not returning XBufferOverflow in
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10182 status_return even if the input is too long to
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10183 fit in 81 bytes. So, we must prepare sufficient
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10184 bytes for copy_buffer. 513 bytes (256 chars for
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10185 two-byte character set) seems to be a faily good
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10186 approximation. -- 2000.8.10 handa@etl.go.jp */
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10187 unsigned char copy_buffer[513];
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10188 unsigned char *copy_bufptr = copy_buffer;
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10189 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
10190 int modifiers;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10191
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10192 event.xkey.state
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10193 |= 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
10194 extra_keyboard_modifiers);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10195 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
10196
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10197 /* 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
10198
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10199 /* 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
10200 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
10201 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
10202 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
10203 | 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
10204 | 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
10205 | 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
10206
16483
1b53fdb98184 (XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents: 16430
diff changeset
10207 /* In case Meta is ComposeCharacter,
1b53fdb98184 (XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents: 16430
diff changeset
10208 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
10209 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
10210 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
10211 not it is combined with Meta. */
1b53fdb98184 (XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents: 16430
diff changeset
10212 if (modifiers & dpyinfo->meta_mod_mask)
1b53fdb98184 (XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents: 16430
diff changeset
10213 bzero (&compose_status, sizeof (compose_status));
1b53fdb98184 (XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents: 16430
diff changeset
10214
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
10215 #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
10216 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
10217 {
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10218 Status status_return;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10219
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
10220 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
10221 &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
10222 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
10223 &status_return);
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10224 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
10225 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10226 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
10227 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
10228 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
10229 &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
10230 copy_bufsiz, &keysym,
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10231 &status_return);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10232 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10233
23567
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
10234 if (status_return == XLookupNone)
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
10235 break;
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
10236 else if (status_return == XLookupChars)
29744
1ac32ce72622 (XTread_socket) <KeyPress>: In case XmbLookupString
Gerd Moellmann <gerd@gnu.org>
parents: 29717
diff changeset
10237 {
1ac32ce72622 (XTread_socket) <KeyPress>: In case XmbLookupString
Gerd Moellmann <gerd@gnu.org>
parents: 29717
diff changeset
10238 keysym = NoSymbol;
1ac32ce72622 (XTread_socket) <KeyPress>: In case XmbLookupString
Gerd Moellmann <gerd@gnu.org>
parents: 29717
diff changeset
10239 modifiers = 0;
1ac32ce72622 (XTread_socket) <KeyPress>: In case XmbLookupString
Gerd Moellmann <gerd@gnu.org>
parents: 29717
diff changeset
10240 }
23567
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
10241 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
10242 && status_return != XLookupBoth)
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
10243 abort ();
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
10244 }
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
10245 else
30748
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10246 nbytes = XLookupString (&event.xkey, copy_bufptr,
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10247 copy_bufsiz, &keysym,
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10248 &compose_status);
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
10249 #else
30748
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10250 nbytes = XLookupString (&event.xkey, copy_bufptr,
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10251 copy_bufsiz, &keysym,
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10252 &compose_status);
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
10253 #endif
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10254
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10255 orig_keysym = keysym;
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 if (numchars > 1)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10258 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10259 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
10260 || keysym == XK_Delete
17227
d11d6c9a48e8 (XTread_socket): Handle ISO_Left_Tab.
Richard M. Stallman <rms@gnu.org>
parents: 17194
diff changeset
10261 #ifdef XK_ISO_Left_Tab
17232
4604d19bd730 (XTread_socket): Accept XK_ISO_* keys.
Richard M. Stallman <rms@gnu.org>
parents: 17227
diff changeset
10262 || (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
10263 #endif
22400
8fbe6f509385 (XTread_socket): Accept Japanese XK keysyms.
Richard M. Stallman <rms@gnu.org>
parents: 22230
diff changeset
10264 || (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
10265 || 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
10266 || IsMiscFunctionKey (keysym) /* 0xff60 <= x < VARIES */
3218
0069a30d083f (XTread_socket, case KeyPress) [HPUX]:
Richard M. Stallman <rms@gnu.org>
parents: 3135
diff changeset
10267 #ifdef HPUX
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10268 /* 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
10269 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
10270 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
10271 incorrectly. */
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10272 || ((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
10273 && (unsigned)(keysym) < XK_KP_Space)
3218
0069a30d083f (XTread_socket, case KeyPress) [HPUX]:
Richard M. Stallman <rms@gnu.org>
parents: 3135
diff changeset
10274 #endif
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
10275 #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
10276 || orig_keysym == XK_dead_circumflex
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
10277 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
10278 #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
10279 || orig_keysym == XK_dead_grave
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
10280 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
10281 #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
10282 || orig_keysym == XK_dead_tilde
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
10283 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
10284 #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
10285 || orig_keysym == XK_dead_diaeresis
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
10286 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
10287 #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
10288 || orig_keysym == XK_dead_macron
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
10289 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
10290 #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
10291 || orig_keysym == XK_dead_degree
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
10292 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
10293 #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
10294 || orig_keysym == XK_dead_acute
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
10295 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
10296 #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
10297 || orig_keysym == XK_dead_cedilla
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
10298 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
10299 #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
10300 || orig_keysym == XK_dead_breve
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
10301 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
10302 #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
10303 || orig_keysym == XK_dead_ogonek
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
10304 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
10305 #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
10306 || orig_keysym == XK_dead_caron
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
10307 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
10308 #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
10309 || orig_keysym == XK_dead_doubleacute
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
10310 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
10311 #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
10312 || orig_keysym == XK_dead_abovedot
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
10313 #endif
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10314 || 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
10315 || 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
10316 /* 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
10317 || (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
10318 && ! (IsModifierKey (orig_keysym)
4244
bc70363458c3 (XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents: 4147
diff changeset
10319 #ifndef HAVE_X11R5
bc70363458c3 (XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents: 4147
diff changeset
10320 #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
10321 || ((unsigned)(orig_keysym) == XK_Mode_switch)
4244
bc70363458c3 (XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents: 4147
diff changeset
10322 #endif
bc70363458c3 (XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents: 4147
diff changeset
10323 #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
10324 || ((unsigned)(orig_keysym) == XK_Num_Lock)
4244
bc70363458c3 (XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents: 4147
diff changeset
10325 #endif
bc70363458c3 (XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents: 4147
diff changeset
10326 #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
10327 ))
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10328 {
2064
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
10329 if (temp_index == sizeof temp_buffer / sizeof (short))
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
10330 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
10331 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
10332 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
10333 bufp->code = keysym;
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
10334 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
10335 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
10336 bufp->modifiers
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
10337 = 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
10338 modifiers);
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 642
diff changeset
10339 bufp->timestamp = event.xkey.time;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10340 bufp++;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10341 count++;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10342 numchars--;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10343 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10344 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
10345 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10346 register int i;
30748
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10347 register int c;
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10348 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
10349
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10350 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
10351 {
30748
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10352 if (temp_index == (sizeof temp_buffer
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10353 / sizeof (short)))
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10354 temp_index = 0;
30748
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10355 temp_buffer[temp_index++] = copy_bufptr[i];
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10356 }
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10357
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10358 if (/* If the event is not from XIM, */
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10359 event.xkey.keycode != 0
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10360 /* or the current locale doesn't request
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10361 decoding of the intup data, ... */
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10362 || coding.type == coding_type_raw_text
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10363 || coding.type == coding_type_no_conversion)
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10364 {
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10365 /* ... we can use the input data as is. */
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10366 nchars = nbytes;
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10367 }
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10368 else
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10369 {
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10370 /* We have to decode the input data. */
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10371 int require;
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10372 unsigned char *p;
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10373
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10374 require = decoding_buffer_size (&coding, nbytes);
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10375 p = (unsigned char *) alloca (require);
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10376 coding.mode |= CODING_MODE_LAST_BLOCK;
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10377 decode_coding (&coding, copy_bufptr, p,
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10378 nbytes, require);
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10379 nbytes = coding.produced;
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10380 nchars = coding.produced_char;
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10381 copy_bufptr = p;
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10382 }
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10383
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10384 /* Convert the input data to a sequence of
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10385 character events. */
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10386 for (i = 0; i < nbytes; i += len)
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10387 {
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10388 c = STRING_CHAR_AND_LENGTH (copy_bufptr + i,
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10389 nbytes - i, len);
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10390 bufp->kind = (SINGLE_BYTE_CHAR_P (c)
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10391 ? ascii_keystroke
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10392 : multibyte_char_keystroke);
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10393 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
10394 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
10395 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
10396 bufp->modifiers
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10397 = 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
10398 modifiers);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10399 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
10400 bufp++;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10401 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10402
30748
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10403 count += nchars;
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
10404 numchars -= nchars;
23567
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
10405
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
10406 if (keysym == NoSymbol)
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
10407 break;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10408 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10409 else
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10410 abort ();
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10411 }
2064
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
10412 else
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
10413 abort ();
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10414 }
27619
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10415 #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
10416 /* 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
10417 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
10418 client. */
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10419 break;
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10420 #else
13898
dceb33c07f9e (XTread_socket): Pass KeyPress events to the toolkit.
Richard M. Stallman <rms@gnu.org>
parents: 13884
diff changeset
10421 goto OTHER;
27619
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10422 #endif
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10423
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10424 case KeyRelease:
27619
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10425 #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
10426 /* 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
10427 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
10428 client. */
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10429 break;
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10430 #else
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10431 goto OTHER;
27619
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10432 #endif
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10433
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10434 /* 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
10435 FocusIn-EnterNotify FocusOut-LeaveNotify mess. If
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10436 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
10437 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
10438 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
10439 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
10440
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10441 case EnterNotify:
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10442 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10443 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
10444
36776
66a72e7c05aa (XTread_socket) <LeaveNotify, EnterNotify>: Remove
Gerd Moellmann <gerd@gnu.org>
parents: 36774
diff changeset
10445 if (event.xcrossing.focus)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10446 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10447 /* Avoid nasty pop/raise loops. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10448 if (f && (!(f->auto_raise)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10449 || !(f->auto_lower)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10450 || (event.xcrossing.time - enter_timestamp) > 500))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10451 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10452 x_new_focus_frame (dpyinfo, f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10453 enter_timestamp = event.xcrossing.time;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10454 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10455 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10456 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
10457 x_new_focus_frame (dpyinfo, 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10458
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10459 /* EnterNotify counts as mouse movement,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10460 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
10461 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
10462 note_mouse_movement (f, &event.xmotion);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10463 goto OTHER;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10464 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10465
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10466 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
10467 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
10468 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
10469 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
10470 if (f)
29512
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
10471 {
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
10472 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
10473
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
10474 /* 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
10475 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
10476 if (GC_NILP (Vterminal_frame)
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
10477 && GC_CONSP (Vframe_list)
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
10478 && !GC_NILP (XCDR (Vframe_list)))
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
10479 {
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
10480 bufp->kind = FOCUS_IN_EVENT;
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
10481 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
10482 bufp->arg = Qnil;
29512
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
10483 ++bufp, ++count, --numchars;
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
10484 }
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
10485 }
13205
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
10486
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
10487 #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
10488 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
10489 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
10490 #endif
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
10491
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10492 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10493
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10494 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
10495 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
10496 if (f)
7169
c21fcad6f1f5 (XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents: 7167
diff changeset
10497 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10498 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
10499 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10500 /* 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
10501 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
10502 clear_mouse_face (dpyinfo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10503 dpyinfo->mouse_face_mouse_frame = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10504 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10505
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10506 /* 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
10507 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
10508 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
10509 the mouse leaves the frame. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10510 if (any_help_event_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10511 {
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
10512 Lisp_Object frame;
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
10513 int n;
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
10514
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10515 XSETFRAME (frame, f);
35082
f329eb3f956b (XTread_socket) <LeaveNotify>: Set help_echo to nil.
Gerd Moellmann <gerd@gnu.org>
parents: 35068
diff changeset
10516 help_echo = Qnil;
31011
bc4608ec8691 (XTread_socket): Change calls to gen_help_event.
Gerd Moellmann <gerd@gnu.org>
parents: 30748
diff changeset
10517 n = gen_help_event (bufp, numchars,
bc4608ec8691 (XTread_socket): Change calls to gen_help_event.
Gerd Moellmann <gerd@gnu.org>
parents: 30748
diff changeset
10518 Qnil, frame, Qnil, Qnil, 0);
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
10519 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
10520 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10521
36776
66a72e7c05aa (XTread_socket) <LeaveNotify, EnterNotify>: Remove
Gerd Moellmann <gerd@gnu.org>
parents: 36774
diff changeset
10522 if (event.xcrossing.focus)
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
10523 x_mouse_leave (dpyinfo);
7169
c21fcad6f1f5 (XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents: 7167
diff changeset
10524 else
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10525 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
10526 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
10527 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
10528 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
10529 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
10530 }
7169
c21fcad6f1f5 (XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents: 7167
diff changeset
10531 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10532 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10533
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10534 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
10535 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
10536 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
10537 && 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
10538 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
10539 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
10540 x_new_focus_frame (dpyinfo, 0);
13205
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
10541
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
10542 #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
10543 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
10544 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
10545 #endif
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
10546
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10547 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10548
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10549 case MotionNotify:
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10550 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10551 previous_help_echo = help_echo;
30302
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
10552 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
10553 help_echo_pos = -1;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10554
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10555 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
10556 && 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
10557 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
10558 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
10559 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
10560
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10561 if (f)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10562 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
10563 else
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10564 {
25795
84921c27b2b5 (XTread_socket) <MotionNotify>: Change #ifdef
Gerd Moellmann <gerd@gnu.org>
parents: 25716
diff changeset
10565 #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
10566 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
10567 = 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
10568
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10569 if (bar)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10570 x_scroll_bar_note_movement (bar, &event);
25795
84921c27b2b5 (XTread_socket) <MotionNotify>: Change #ifdef
Gerd Moellmann <gerd@gnu.org>
parents: 25716
diff changeset
10571 #endif /* USE_TOOLKIT_SCROLL_BARS */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10572
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10573 /* 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
10574 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
10575 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
10576 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10577
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10578 /* 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
10579 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
10580 if (!NILP (help_echo)
ed1979c6dfb9 * xterm.c (note_mode_line_highlight, note_mouse_highlight)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30042
diff changeset
10581 || !NILP (previous_help_echo))
24991
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 Lisp_Object frame;
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
10584 int n;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10585
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10586 if (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10587 XSETFRAME (frame, f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10588 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10589 frame = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10590
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10591 any_help_event_p = 1;
31011
bc4608ec8691 (XTread_socket): Change calls to gen_help_event.
Gerd Moellmann <gerd@gnu.org>
parents: 30748
diff changeset
10592 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
10593 help_echo_window, help_echo_object,
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
10594 help_echo_pos);
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
10595 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
10596 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10597
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10598 goto OTHER;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10599 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10600
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10601 case ConfigureNotify:
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10602 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
10603 if (f)
3030
2c5ea1c98256 (XTread_socket): For ConfigureNotify event,
Richard M. Stallman <rms@gnu.org>
parents: 3016
diff changeset
10604 {
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
10605 #ifndef USE_X_TOOLKIT
24489
abf5b4802f9b (XTread_socket) <ConfigureNotify>:
Karl Heuer <kwzh@gnu.org>
parents: 24484
diff changeset
10606 int rows = PIXEL_TO_CHAR_HEIGHT (f, event.xconfigure.height);
abf5b4802f9b (XTread_socket) <ConfigureNotify>:
Karl Heuer <kwzh@gnu.org>
parents: 24484
diff changeset
10607 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
10608
11436
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
10609 /* 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
10610 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
10611 of the EmacsFrame widget. */
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
10612
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10613 /* 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
10614 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
10615 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
10616 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
10617 || 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
10618 || 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
10619 || 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
10620 {
25360
2f3ad0a21be5 Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents: 25328
diff changeset
10621 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
10622 SET_FRAME_GARBAGED (f);
16491
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
10623 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
10624 }
11436
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
10625 #endif
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
10626
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
10627 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
10628 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
10629
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10630 /* 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
10631 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
10632 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
10633 &f->output_data.x->top_pos);
d25d2472df51 (XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents: 17963
diff changeset
10634
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10635 #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
10636 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
10637 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
10638 #endif
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10639
18008
d25d2472df51 (XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents: 17963
diff changeset
10640 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
10641 {
d25d2472df51 (XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents: 17963
diff changeset
10642 /* 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
10643 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
10644 f->output_data.x->win_gravity = NorthWestGravity;
d25d2472df51 (XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents: 17963
diff changeset
10645 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
10646 }
20182
9f3dd970927e (XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents: 20180
diff changeset
10647 #ifdef USE_MOTIF
9f3dd970927e (XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents: 20180
diff changeset
10648 /* 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
10649 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
10650 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
10651 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
10652 {
9f3dd970927e (XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents: 20180
diff changeset
10653 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
10654 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
10655 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10656 #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
10657 }
11436
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
10658 goto OTHER;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10659
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10660 case ButtonPress:
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10661 case ButtonRelease:
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
10662 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10663 /* 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
10664 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
10665 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
10666 int tool_bar_p = 0;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10667
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10668 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
10669 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
10670
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10671 if (dpyinfo->grabbed
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10672 && last_mouse_frame
10274
83aaf59dabbe (XTupdate_begin): Fix backward test in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 10223
diff changeset
10673 && 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
10674 f = last_mouse_frame;
83aaf59dabbe (XTupdate_begin): Fix backward test in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 10223
diff changeset
10675 else
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10676 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
10677
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10678 if (f)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10679 {
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
10680 /* 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
10681 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
10682 && 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
10683 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10684 Lisp_Object window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10685 int p, x, y;
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 x = event.xbutton.x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10688 y = event.xbutton.y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10689
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10690 /* Set x and y. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10691 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
10692 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
10693 {
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
10694 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
10695 tool_bar_p = 1;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10696 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10697 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10698
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
10699 if (!tool_bar_p)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10700 if (!dpyinfo->x_focus_frame
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10701 || f == dpyinfo->x_focus_frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10702 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
10703 }
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10704 else
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10705 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10706 #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
10707 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
10708 = 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
10709
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10710 if (bar)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10711 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
10712 #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
10713 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10714
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10715 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
10716 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10717 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
10718 last_mouse_frame = f;
23643
701b6bdc7a22 (XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents: 23567
diff changeset
10719 /* Ignore any mouse motion that happened
701b6bdc7a22 (XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents: 23567
diff changeset
10720 before this event; any subsequent mouse-movement
701b6bdc7a22 (XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents: 23567
diff changeset
10721 Emacs events should reflect only motion after
701b6bdc7a22 (XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents: 23567
diff changeset
10722 the ButtonPress. */
23701
6c0896abbbd4 (XTread_socket): Fix previous change in case F == 0.
Karl Heuer <kwzh@gnu.org>
parents: 23684
diff changeset
10723 if (f != 0)
6c0896abbbd4 (XTread_socket): Fix previous change in case F == 0.
Karl Heuer <kwzh@gnu.org>
parents: 23684
diff changeset
10724 f->mouse_moved = 0;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10725
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
10726 if (!tool_bar_p)
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
10727 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
10728 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10729 else
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10730 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10731 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
10732 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10733
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10734 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
10735 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10736 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
10737 bufp++;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10738 count++;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10739 numchars--;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10740 }
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10741
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10742 #ifdef USE_X_TOOLKIT
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10743 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
10744 /* For a down-event in the menu bar,
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10745 don't pass it to Xt right now.
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10746 Instead, save it away
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10747 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
10748 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
10749 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
10750 /* 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
10751 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
10752 && event.xbutton.x >= 0
21b6b8f50143 (XTread_socket): Verify a ButtonPress was actually in the
Richard M. Stallman <rms@gnu.org>
parents: 13507
diff changeset
10753 && 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
10754 && event.xbutton.y >= 0
21b6b8f50143 (XTread_socket): Verify a ButtonPress was actually in the
Richard M. Stallman <rms@gnu.org>
parents: 13507
diff changeset
10755 && 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
10756 && event.xbutton.same_screen)
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10757 {
15711
099dc465c948 (SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents: 15639
diff changeset
10758 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
10759 XSETFRAME (last_mouse_press_frame, f);
15793
fc460a98a7f9 (last_mouse_press_frame): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 15711
diff changeset
10760 }
15803
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
10761 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
10762 {
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
10763 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
10764 goto OTHER;
15803
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
10765 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10766
15803
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
10767 #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
10768 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
10769 else if (event.type == ButtonRelease)
fc460a98a7f9 (last_mouse_press_frame): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 15711
diff changeset
10770 {
15803
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
10771 if (!NILP (last_mouse_press_frame))
15794
c741a26258ce Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 15793
diff changeset
10772 {
15803
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
10773 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
10774 if (f->output_data.x)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10775 SET_SAVED_BUTTON_EVENT;
15794
c741a26258ce Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 15793
diff changeset
10776 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10777 else
15808
3afa38a18102 (XTread_socket): Delete the code to pass menu bar keys
Richard M. Stallman <rms@gnu.org>
parents: 15806
diff changeset
10778 goto OTHER;
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10779 }
15803
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
10780 #endif /* USE_MOTIF */
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10781 else
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10782 goto OTHER;
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10783 #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
10784 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10785 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10786
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10787 case CirculateNotify:
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10788 goto OTHER;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10789
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10790 case CirculateRequest:
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10791 goto OTHER;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10792
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10793 case VisibilityNotify:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10794 goto OTHER;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10795
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10796 case MappingNotify:
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10797 /* 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
10798 local cache. */
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10799 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
10800 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10801 case MappingModifier:
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10802 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
10803 /* 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
10804 case MappingKeyboard:
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10805 XRefreshKeyboardMapping (&event.xmapping);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10806 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10807 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10808
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10809 default:
13898
dceb33c07f9e (XTread_socket): Pass KeyPress events to the toolkit.
Richard M. Stallman <rms@gnu.org>
parents: 13884
diff changeset
10810 OTHER:
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10811 #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
10812 BLOCK_INPUT;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10813 XtDispatchEvent (&event);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10814 UNBLOCK_INPUT;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10815 #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
10816 break;
1436
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
10817 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10818 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10819 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10820
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10821 out:;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10822
8485
6e4b40c80021 (XTread_socket): Don't test X_IO_BUG; make that code unconditional.
Richard M. Stallman <rms@gnu.org>
parents: 8437
diff changeset
10823 /* 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
10824 when the window is destroyed. Detect that. (1994.) */
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
10825 if (! event_found)
7916
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
10826 {
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
10827 /* 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
10828 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
10829 B. Bretthauer, 1994 */
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
10830 x_noop_count++;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
10831 if (x_noop_count >= 100)
7916
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
10832 {
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
10833 x_noop_count=0;
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10834
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10835 if (next_noop_dpyinfo == 0)
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10836 next_noop_dpyinfo = x_display_list;
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10837
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10838 XNoOp (next_noop_dpyinfo->display);
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10839
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10840 /* 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
10841 next_noop_dpyinfo = next_noop_dpyinfo->next;
7916
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
10842 }
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
10843 }
5753
eb44ecad5557 (XTread_socket): Add X_IO_BUG conditional.
Richard M. Stallman <rms@gnu.org>
parents: 5740
diff changeset
10844
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10845 /* 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
10846 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
10847 /* ??? 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
10848 if (pending_autoraise_frame)
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
10849 {
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
10850 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
10851 pending_autoraise_frame = 0;
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
10852 }
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
10853
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10854 UNBLOCK_INPUT;
30083
998d20abc885 (XTread_socket): Increment handling_signal at the start,
Gerd Moellmann <gerd@gnu.org>
parents: 30050
diff changeset
10855 --handling_signal;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10856 return count;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10857 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10858
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10859
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10860
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10861
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10862 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10863 Text Cursor
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10864 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10865
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10866 /* 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
10867 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
10868 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
10869 line after HPOS has been written. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10870
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10871 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10872 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
10873 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10874 int hpos, n;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10875 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10876 if (updated_area == TEXT_AREA
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10877 && 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
10878 && hpos <= w->phys_cursor.hpos
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10879 && (n < 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10880 || hpos + n > w->phys_cursor.hpos))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10881 w->phys_cursor_on_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10882 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10885 /* 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
10886 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
10887 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
10888 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
10889
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10890 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
10891 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
10892 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
10893
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10894 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10895 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
10896 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10897 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10898 GC gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10899 int whole_line_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10900 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10901 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
10902 XRectangle clip_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10903 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
10904
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10905 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
10906
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10907 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
10908 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
10909 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
10910 clip_rect.width = window_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10911 clip_rect.height = row->visible_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10912
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10913 /* 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
10914 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
10915 if (whole_line_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10916 {
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
10917 clip_rect.x -= FRAME_X_LEFT_FLAGS_AREA_WIDTH (f);
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
10918 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
10919 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10920
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10921 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
10922 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10923
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10924
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10925 /* 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
10926
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10927 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10928 x_draw_hollow_cursor (w, row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10929 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10930 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10931 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10932 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
10933 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
10934 Display *dpy = FRAME_X_DISPLAY (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10935 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
10936 XGCValues xgcv;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10937 struct glyph *cursor_glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10938 GC gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10939
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10940 /* 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
10941 coordinates. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10942 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
10943 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
10944 + row->ascent - w->phys_cursor_ascent);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10945 h = row->height - 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10946
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10947 /* 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
10948 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
10949 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
10950 if (cursor_glyph == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10951 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10952
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10953 /* 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
10954 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
10955 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
10956 width instead. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10957 wd = cursor_glyph->pixel_width - 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10958 if (cursor_glyph->type == STRETCH_GLYPH
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10959 && !x_stretch_cursor_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10960 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
10961
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10962 /* 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
10963 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
10964 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
10965 if (dpyinfo->scratch_cursor_gc)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10966 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
10967 else
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10968 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
10969 GCForeground, &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10970 gc = dpyinfo->scratch_cursor_gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10971
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10972 /* 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
10973 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
10974 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
10975 XSetClipMask (dpy, gc, None);
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10978
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10979 /* 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
10980
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10981 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
10982 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
10983 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
10984 --gerd. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10985
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10986 static void
28321
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10987 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
10988 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10989 struct glyph_row *row;
28321
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10990 int width;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10991 {
30742
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10992 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
10993 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
10994 GC gc;
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10995 int x;
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10996 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
10997 XGCValues xgcv;
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10998 Display *dpy;
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
10999 Window window;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11000
30742
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
11001 /* 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
11002 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
11003 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
11004 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
11005 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
11006 return;
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
11007
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
11008 /* 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
11009 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
11010 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
11011 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
11012 {
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
11013 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
11014 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
11015 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
11016 }
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
11017 else
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
11018 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11019 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
11020 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
11021 xgcv.graphics_exposures = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11022 mask = GCForeground | GCBackground | GCGraphicsExposures;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11023 dpy = FRAME_X_DISPLAY (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11024 window = FRAME_X_WINDOW (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11025 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
11026
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11027 if (gc)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11028 XChangeGC (dpy, gc, mask, &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11029 else
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 gc = XCreateGC (dpy, window, mask, &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11032 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
11033 }
30742
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
11034
28321
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
11035 if (width < 0)
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
11036 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
11037
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11038 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
11039 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
11040 XFillRectangle (dpy, window, gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11041 x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11042 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
11043 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
11044 row->height);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11045 XSetClipMask (dpy, gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11046 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11049
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11050 /* 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
11051 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
11052 is is about to be rewritten. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11053
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11054 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11055 x_clear_cursor (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11056 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11057 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11058 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
11059 x_update_window_cursor (w, 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11060 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11061
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11062
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11063 /* 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
11064 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
11065
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11066 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11067 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
11068 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11069 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11070 enum draw_glyphs_face hl;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11071 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11072 /* 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
11073 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
11074 glyphs and mini-buffer. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11075 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
11076 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
11077 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
11078 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
11079 hl, 0, 0, 0);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
11080
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
11081 /* 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
11082 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
11083 are redrawn. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
11084 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
11085 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
11086 if (row > w->current_matrix->rows
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
11087 && MATRIX_ROW_OVERLAPS_SUCC_P (row - 1))
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
11088 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
11089
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
11090 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
11091 && MATRIX_ROW_OVERLAPS_PRED_P (row + 1))
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
11092 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
11093 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
11094 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11095 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11096
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11097
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11098 /* 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
11099
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11100 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11101 x_erase_phys_cursor (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11102 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11103 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11104 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11105 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
11106 int hpos = w->phys_cursor.hpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11107 int vpos = w->phys_cursor.vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11108 int mouse_face_here_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11109 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
11110 struct glyph_row *cursor_row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11111 struct glyph *cursor_glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11112 enum draw_glyphs_face hl;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11113
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11114 /* 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
11115 screen. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11116 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
11117 goto mark_cursor_off;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11118
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11119 /* 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
11120 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
11121 if (vpos >= active_glyphs->nrows)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11122 goto mark_cursor_off;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11123
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11124 /* 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
11125 can do. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11126 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
11127 if (!cursor_row->enabled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11128 goto mark_cursor_off;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11129
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11130 /* 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
11131 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
11132 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
11133 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
11134 cursor glyph at hand. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11135 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
11136 goto mark_cursor_off;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11137
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11138 /* 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
11139 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
11140 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
11141 && 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
11142 && (vpos > dpyinfo->mouse_face_beg_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11143 || (vpos == dpyinfo->mouse_face_beg_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11144 && hpos >= dpyinfo->mouse_face_beg_col))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11145 && (vpos < dpyinfo->mouse_face_end_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11146 || (vpos == dpyinfo->mouse_face_end_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11147 && hpos < dpyinfo->mouse_face_end_col))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11148 /* 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
11149 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
11150 mouse highlighting does not. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11151 && cursor_row->used[TEXT_AREA] > hpos)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11152 mouse_face_here_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11153
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11154 /* 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
11155 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
11156 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11157 int x;
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
11158 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
11159
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11160 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
11161 if (cursor_glyph == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11162 goto mark_cursor_off;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11163
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11164 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
11165
35581
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
11166 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
11167 x,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
11168 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
11169 cursor_row->y)),
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
11170 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
11171 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
11172 False);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11173 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11174
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11175 /* 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
11176 if (mouse_face_here_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11177 hl = DRAW_MOUSE_FACE;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11178 else if (cursor_row->inverse_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11179 hl = DRAW_INVERSE_VIDEO;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11180 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11181 hl = DRAW_NORMAL_TEXT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11182 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
11183
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11184 mark_cursor_off:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11185 w->phys_cursor_on_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11186 w->phys_cursor_type = NO_CURSOR;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11187 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11188
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11189
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11190 /* 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
11191 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
11192 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
11193
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11194 void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11195 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
11196 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11197 int on, hpos, vpos, x, y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11198 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11199 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11200 int new_cursor_type;
28321
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
11201 int new_cursor_width;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11202 struct glyph_matrix *current_glyphs;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11203 struct glyph_row *glyph_row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11204 struct glyph *glyph;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
11205
2235
80e0d36bbb77 * xterm.c (x_display_box_cursor, x_display_bar_cursor): Don't
Jim Blandy <jimb@redhat.com>
parents: 2195
diff changeset
11206 /* 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
11207 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
11208 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
11209 window. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11210 if (! FRAME_VISIBLE_P (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11211 || FRAME_GARBAGED_P (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11212 || vpos >= w->current_matrix->nrows
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11213 || hpos >= w->current_matrix->matrix_w)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
11214 return;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
11215
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
11216 /* 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
11217 if (!on && !w->phys_cursor_on_p)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
11218 return;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
11219
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11220 current_glyphs = w->current_matrix;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11221 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
11222 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
11223
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11224 /* 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
11225 display the cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11226 if (!glyph_row->enabled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11227 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11228 w->phys_cursor_on_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11229 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11230 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11231
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11232 xassert (interrupt_input_blocked);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11233
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11234 /* 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
11235 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
11236 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
11237 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
11238 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
11239 box cursor. */
28321
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
11240 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
11241 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
11242 && 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
11243 && 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
11244 {
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
11245 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
11246 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
11247 else
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
11248 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
11249 }
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
11250 else
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
11251 {
35897
02652537e9d2 (x_display_and_set_cursor): Check for the focus
Gerd Moellmann <gerd@gnu.org>
parents: 35581
diff changeset
11252 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
11253 || 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
11254 {
27844
72e15185eeb5 (x_display_and_set_cursor): Display cursor of
Gerd Moellmann <gerd@gnu.org>
parents: 27619
diff changeset
11255 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
11256
31699
9ff91d2b19f8 (x_display_and_set_cursor): Don't show a hollow box
Gerd Moellmann <gerd@gnu.org>
parents: 31694
diff changeset
11257 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
11258 || !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
11259 || 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
11260 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
11261 else
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
11262 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
11263 }
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
11264 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
11265 new_cursor_type = NO_CURSOR;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11266 else
28321
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
11267 {
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
11268 struct buffer *b = XBUFFER (w->buffer);
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
11269
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
11270 if (EQ (b->cursor_type, Qt))
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
11271 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
11272 else
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
11273 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
11274 &new_cursor_width);
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
11275 }
25191
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
11276 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11277
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11278 /* 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
11279 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
11280 erase it. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11281 if (w->phys_cursor_on_p
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11282 && (!on
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11283 || w->phys_cursor.x != x
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11284 || w->phys_cursor.y != y
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11285 || 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
11286 x_erase_phys_cursor (w);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11287
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11288 /* 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
11289 display it. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11290 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
11291 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11292 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
11293 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
11294
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11295 /* 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
11296 of them may need the information. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11297 w->phys_cursor.x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11298 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
11299 w->phys_cursor.hpos = hpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11300 w->phys_cursor.vpos = vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11301 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
11302 w->phys_cursor_on_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11303
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11304 switch (new_cursor_type)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11305 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11306 case HOLLOW_BOX_CURSOR:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11307 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
11308 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11309
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11310 case FILLED_BOX_CURSOR:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11311 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
11312 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11313
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11314 case BAR_CURSOR:
28321
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
11315 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
11316 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11317
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11318 case NO_CURSOR:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11319 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11320
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11321 default:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11322 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11323 }
27619
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
11324
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
11325 #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
11326 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
11327 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
11328 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
11329 #endif
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11330 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11331
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11332 #ifndef XFlush
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11333 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
11334 XFlush (FRAME_X_DISPLAY (f));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11335 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11336 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11337
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11338
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11339 /* 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
11340 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
11341 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
11342 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
11343 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
11344
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
11345 void
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11346 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
11347 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11348 int on, hpos, vpos, x, y;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11349 {
5872
6389c826f847 (x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents: 5825
diff changeset
11350 BLOCK_INPUT;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11351 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
11352 UNBLOCK_INPUT;
80a5aedfb4c7 (XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents: 12192
diff changeset
11353 }
80a5aedfb4c7 (XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents: 12192
diff changeset
11354
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11355
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11356 /* 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
11357 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
11358
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
11359 void
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11360 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
11361 struct frame *f;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11362 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11363 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
11364 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11365
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11366
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11367 /* 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
11368 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
11369
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11370 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11371 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
11372 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11373 int on_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11374 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11375 while (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11376 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11377 if (!NILP (w->hchild))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11378 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
11379 else if (!NILP (w->vchild))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11380 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
11381 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11382 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
11383
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11384 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
11385 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11386 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11387
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11388
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11389 /* 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
11390 of ON. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11391
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11392 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11393 x_update_window_cursor (w, on)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11394 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
11395 int on;
80a5aedfb4c7 (XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents: 12192
diff changeset
11396 {
28183
7d97c6fbc3d9 (x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents: 28142
diff changeset
11397 /* 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
11398 of being deleted. */
7d97c6fbc3d9 (x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents: 28142
diff changeset
11399 if (w->current_matrix)
7d97c6fbc3d9 (x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents: 28142
diff changeset
11400 {
7d97c6fbc3d9 (x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents: 28142
diff changeset
11401 BLOCK_INPUT;
7d97c6fbc3d9 (x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents: 28142
diff changeset
11402 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
11403 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
11404 UNBLOCK_INPUT;
7d97c6fbc3d9 (x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents: 28142
diff changeset
11405 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11406 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11407
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11408
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11409
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11410
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11411 /* Icons. */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11412
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11413 /* 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
11414 when we get an expose event for it. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11415
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
11416 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11417 refreshicon (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11418 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11419 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11420 /* Normally, the window manager handles this function. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11421 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11422
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
11423 /* Make the x-window of frame F use the gnu icon bitmap. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11424
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11425 int
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11426 x_bitmap_icon (f, file)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11427 struct frame *f;
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11428 Lisp_Object file;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11429 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11430 int bitmap_id;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11431
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
11432 if (FRAME_X_WINDOW (f) == 0)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11433 return 1;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11434
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11435 /* 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
11436 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
11437 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
11438 f->output_data.x->icon_bitmap = 0;
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11439
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11440 if (STRINGP (file))
9542
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
11441 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
11442 else
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
11443 {
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11444 /* 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
11445 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
11446 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
11447 = 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
11448 gnu_width, gnu_height);
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11449
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11450 /* 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
11451 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
11452 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
11453 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
11454 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
11455
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
11456 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
11457 }
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
11458
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
11459 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
11460 f->output_data.x->icon_bitmap = bitmap_id;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11461
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11462 return 0;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11463 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11464
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11465
12074
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
11466 /* 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
11467 Use ICON_NAME as the text. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11468
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11469 int
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11470 x_text_icon (f, icon_name)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11471 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11472 char *icon_name;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11473 {
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
11474 if (FRAME_X_WINDOW (f) == 0)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11475 return 1;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11476
12074
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
11477 #ifdef HAVE_X11R4
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
11478 {
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
11479 XTextProperty text;
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
11480 text.value = (unsigned char *) icon_name;
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
11481 text.encoding = XA_STRING;
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
11482 text.format = 8;
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
11483 text.nitems = strlen (icon_name);
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
11484 #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
11485 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
11486 &text);
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
11487 #else /* not USE_X_TOOLKIT */
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
11488 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
11489 #endif /* not USE_X_TOOLKIT */
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
11490 }
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
11491 #else /* not HAVE_X11R4 */
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
11492 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
11493 #endif /* not HAVE_X11R4 */
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
11494
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11495 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
11496 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
11497 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
11498 x_wm_set_icon_pixmap (f, 0);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11499
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11500 return 0;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11501 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11502
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11503 #define X_ERROR_MESSAGE_SIZE 200
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11504
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11505 /* If non-nil, this should be a string.
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11506 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
11507
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11508 static Lisp_Object x_error_message_string;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11509
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11510 /* 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
11511 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
11512 x_catch_errors is in effect. */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11513
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11514 static void
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11515 x_error_catcher (display, error)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11516 Display *display;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11517 XErrorEvent *error;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11518 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11519 XGetErrorText (display, error->error_code,
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11520 XSTRING (x_error_message_string)->data,
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11521 X_ERROR_MESSAGE_SIZE);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11522 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11523
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11524 /* 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
11525 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
11526 operating on.
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11527
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11528 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
11529 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
11530 stored in x_error_message_string.
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11531
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11532 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
11533 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
11534
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11535 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
11536
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11537 void x_check_errors ();
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11538 static Lisp_Object x_catch_errors_unwind ();
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11539
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11540 int
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11541 x_catch_errors (dpy)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11542 Display *dpy;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11543 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11544 int count = specpdl_ptr - specpdl;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11545
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11546 /* 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
11547 XSync (dpy, False);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11548
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11549 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
11550
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11551 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
11552 XSTRING (x_error_message_string)->data[0] = 0;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11553
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11554 return count;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11555 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11556
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11557 /* 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
11558
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11559 static Lisp_Object
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11560 x_catch_errors_unwind (old_val)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11561 Lisp_Object old_val;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11562 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11563 x_error_message_string = old_val;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11564 return Qnil;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11565 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11566
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11567 /* 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
11568 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
11569 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
11570
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11571 void
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11572 x_check_errors (dpy, format)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11573 Display *dpy;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11574 char *format;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11575 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11576 /* 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
11577 XSync (dpy, False);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11578
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11579 if (XSTRING (x_error_message_string)->data[0])
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11580 error (format, XSTRING (x_error_message_string)->data);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11581 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11582
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11583 /* 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
11584 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
11585
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11586 int
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11587 x_had_errors_p (dpy)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11588 Display *dpy;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11589 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11590 /* 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
11591 XSync (dpy, False);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11592
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11593 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
11594 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11595
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11596 /* 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
11597
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11598 void
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11599 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
11600 Display *dpy;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11601 {
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11602 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
11603 }
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11604
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11605 /* 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
11606 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
11607 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
11608 the corresponding call to x_catch_errors. */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11609
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11610 void
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11611 x_uncatch_errors (dpy, count)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11612 Display *dpy;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11613 int count;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11614 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11615 unbind_to (count, Qnil);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11616 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11617
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11618 #if 0
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11619 static unsigned int x_wire_count;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11620 x_trace_wire ()
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11621 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11622 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
11623 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11624 #endif /* ! 0 */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11625
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11626
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11627 /* 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
11628 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
11629 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
11630 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
11631 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
11632
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11633 static SIGTYPE
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11634 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
11635 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
11636 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11637 #ifdef USG
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11638 /* USG systems forget handlers when they are used;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11639 must reestablish each time */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11640 signal (signalnum, x_connection_signal);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11641 #endif /* USG */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11642 }
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11643
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11644
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11645 /************************************************************************
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11646 Handling X errors
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11647 ************************************************************************/
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11648
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11649 /* 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
11650 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
11651
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 555
diff changeset
11652 static SIGTYPE
34673
77cda2c018e5 (x_connection_closed): Prevent being called recursively
Gerd Moellmann <gerd@gnu.org>
parents: 34621
diff changeset
11653 x_connection_closed (dpy, error_message)
77cda2c018e5 (x_connection_closed): Prevent being called recursively
Gerd Moellmann <gerd@gnu.org>
parents: 34621
diff changeset
11654 Display *dpy;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11655 char *error_message;
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 555
diff changeset
11656 {
34673
77cda2c018e5 (x_connection_closed): Prevent being called recursively
Gerd Moellmann <gerd@gnu.org>
parents: 34621
diff changeset
11657 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
11658 Lisp_Object frame, tail;
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11659 int count;
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11660 char *msg;
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11661
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11662 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
11663 strcpy (msg, error_message);
34949
bbd0e7b5043a (x_connection_closed): Set handling_signal to 0 at
Gerd Moellmann <gerd@gnu.org>
parents: 34869
diff changeset
11664 handling_signal = 0;
bbd0e7b5043a (x_connection_closed): Set handling_signal to 0 at
Gerd Moellmann <gerd@gnu.org>
parents: 34869
diff changeset
11665
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11666 /* 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
11667 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
11668 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
11669 the original message here. */
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11670 count = x_catch_errors (dpy);
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11671
34213
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11672 /* 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
11673 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
11674 events from the display. As a consequence, a sequence of
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11675
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11676 M-x make-frame-on-display RET :1 RET
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11677 ...kill the new frame, so that we get an IO error...
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11678 M-x make-frame-on-display RET :1 RET
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11679
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11680 will indefinitely wait in Xt for events for display `:1', opened
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11681 in the first class to make-frame-on-display.
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11682
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11683 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
11684 OpenWindows in certain situations. I suspect that is a bug
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11685 in OpenWindows. I don't know how to cicumvent it here. */
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11686
17825
281d99590839 (dumpglyphs): Draw glyphs one by one if the font for
Kenichi Handa <handa@m17n.org>
parents: 17720
diff changeset
11687 #ifdef USE_X_TOOLKIT
35309
cb7e1d7b6b67 (x_connection_closed) [USE_X_TOOLKIT]: If
Gerd Moellmann <gerd@gnu.org>
parents: 35276
diff changeset
11688 /* 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
11689 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
11690 if (dpyinfo)
cb7e1d7b6b67 (x_connection_closed) [USE_X_TOOLKIT]: If
Gerd Moellmann <gerd@gnu.org>
parents: 35276
diff changeset
11691 XtCloseDisplay (dpy);
17825
281d99590839 (dumpglyphs): Draw glyphs one by one if the font for
Kenichi Handa <handa@m17n.org>
parents: 17720
diff changeset
11692 #endif
34213
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11693
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
11694 /* 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
11695 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
11696 dpyinfo->display = 0;
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
11697
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11698 /* 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
11699 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
11700 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
11701 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11702 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
11703 minibuf_frame
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11704 = 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
11705 if (FRAME_X_P (XFRAME (frame))
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
11706 && FRAME_X_P (XFRAME (minibuf_frame))
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
11707 && ! EQ (frame, minibuf_frame)
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
11708 && 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
11709 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
11710 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11711
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11712 /* 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
11713 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
11714 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
11715 FOR_EACH_FRAME (tail, frame)
10921
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
11716 if (FRAME_X_P (XFRAME (frame))
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
11717 && 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
11718 {
0d37c1e81c0d (x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents: 11901
diff changeset
11719 /* 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
11720 trying to find a replacement. */
0d37c1e81c0d (x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents: 11901
diff changeset
11721 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
11722 Fdelete_frame (frame, Qt);
0d37c1e81c0d (x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents: 11901
diff changeset
11723 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11724
13727
9eb09adbcb38 (x_connection_closed): Don't delete dpyinfo if it's null.
Karl Heuer <kwzh@gnu.org>
parents: 13633
diff changeset
11725 if (dpyinfo)
9eb09adbcb38 (x_connection_closed): Don't delete dpyinfo if it's null.
Karl Heuer <kwzh@gnu.org>
parents: 13633
diff changeset
11726 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
11727
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11728 x_uncatch_errors (dpy, count);
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11729
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11730 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
11731 {
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11732 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
11733 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
11734 exit (70);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11735 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11736
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11737 /* 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
11738 #ifdef SIGIO
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11739 sigunblock (sigmask (SIGIO));
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11740 #endif
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11741 sigunblock (sigmask (SIGALRM));
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11742 TOTALLY_UNBLOCK_INPUT;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11743
15526
926ef4afc174 (x_connection_closed): Call clear_waiting_for_input.
Richard M. Stallman <rms@gnu.org>
parents: 15521
diff changeset
11744 clear_waiting_for_input ();
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11745 error ("%s", msg);
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11746 }
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11747
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 555
diff changeset
11748
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11749 /* 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
11750 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
11751 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
11752
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11753 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
11754 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
11755 Display *display;
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
11756 XErrorEvent *error;
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
11757 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11758 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
11759
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
11760 /* 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
11761 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
11762
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
11763 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
11764 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
11765 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
11766 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
11767 }
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
11768
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
11769
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11770 /* 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
11771 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
11772
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11773 static int
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11774 x_error_handler (display, error)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11775 Display *display;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11776 XErrorEvent *error;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11777 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11778 if (! NILP (x_error_message_string))
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11779 x_error_catcher (display, error);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11780 else
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11781 x_error_quitter (display, error);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11782 return 0;
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11783 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11784
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11785 /* 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
11786 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
11787 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
11788
1875
f569bc4e9b8f * xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents: 1841
diff changeset
11789 static int
f569bc4e9b8f * xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents: 1841
diff changeset
11790 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
11791 Display *display;
f569bc4e9b8f * xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents: 1841
diff changeset
11792 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11793 char buf[256];
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11794
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11795 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
11796 x_connection_closed (display, buf);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11797 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
11798 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11799
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
11800 /* 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
11801
8291
9c6ddd14996b (struct font_info): New field full_name.
Richard M. Stallman <rms@gnu.org>
parents: 8279
diff changeset
11802 /* 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
11803 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
11804 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
11805 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
11806
3076
e3b3c67cf203 Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents: 3066
diff changeset
11807 Lisp_Object
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11808 x_new_font (f, fontname)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11809 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11810 register char *fontname;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11811 {
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11812 struct font_info *fontp
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
11813 = 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
11814
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11815 if (!fontp)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11816 return Qnil;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11817
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11818 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
11819 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
11820 f->output_data.x->fontset = -1;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11821
9167
8ad448b29c1c (x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents: 9101
diff changeset
11822 /* 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
11823 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
11824 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11825 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
11826 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
11827 }
8ad448b29c1c (x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents: 9101
diff changeset
11828 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
11829 {
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
11830 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
11831 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
11832 }
9167
8ad448b29c1c (x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents: 9101
diff changeset
11833
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11834 /* 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
11835 if (FRAME_X_WINDOW (f) != 0)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11836 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11837 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
11838 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
11839 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
11840 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
11841 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
11842 f->output_data.x->font->fid);
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11843
6767
8fbcee1c2059 (stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents: 6757
diff changeset
11844 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
11845
5ad77d538e08 (x_new_font): Don't change a tooltip's size.
Gerd Moellmann <gerd@gnu.org>
parents: 35487
diff changeset
11846 /* 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
11847 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
11848 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
11849 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
11850 x_set_window_size (f, 0, f->width, f->height);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11851 }
6767
8fbcee1c2059 (stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents: 6757
diff changeset
11852 else
8fbcee1c2059 (stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents: 6757
diff changeset
11853 /* 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
11854 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
11855 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
11856
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11857 return build_string (fontp->full_name);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11858 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11859
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11860 /* 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
11861 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
11862 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
11863 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
11864
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11865 Lisp_Object
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11866 x_new_fontset (f, fontsetname)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11867 struct frame *f;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11868 char *fontsetname;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11869 {
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
11870 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
11871 Lisp_Object result;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11872
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11873 if (fontset < 0)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11874 return Qnil;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11875
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
11876 if (f->output_data.x->fontset == fontset)
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
11877 /* 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
11878 to do. */
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
11879 return fontset_name (fontset);
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
11880
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
11881 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
11882
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11883 if (!STRINGP (result))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11884 /* Can't load ASCII font. */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11885 return Qnil;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11886
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11887 /* 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
11888 f->output_data.x->fontset = fontset;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11889
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11890 #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
11891 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
11892 && (FRAME_XIC_STYLE (f) & (XIMPreeditPosition | XIMStatusArea)))
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
11893 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
11894 #endif
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11895
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11896 return build_string (fontsetname);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11897 }
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11898
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11899
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11900 /***********************************************************************
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11901 X Input Methods
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11902 ***********************************************************************/
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11903
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11904 #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
11905
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11906 #ifdef HAVE_X11R6
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11907
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11908 /* 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
11909 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
11910 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
11911
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11912 static void
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11913 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
11914 XIM xim;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11915 XPointer client_data;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11916 XPointer call_data;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11917 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11918 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
11919 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
11920
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11921 BLOCK_INPUT;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11922
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11923 /* 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
11924 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
11925 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11926 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
11927 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
11928 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11929 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
11930 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
11931 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11932 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
11933 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
11934 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11935 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11936 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11937
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11938 /* 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
11939 dpyinfo->xim = NULL;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11940 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
11941 UNBLOCK_INPUT;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11942 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11943
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11944 #endif /* HAVE_X11R6 */
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11945
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11946 /* 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
11947 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
11948
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11949 static void
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11950 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
11951 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
11952 char *resource_name;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11953 {
29948
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
11954 #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
11955 XIM xim;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11956
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11957 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
11958 dpyinfo->xim = xim;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11959
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11960 if (xim)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11961 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11962 #ifdef HAVE_X11R6
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11963 XIMCallback destroy;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11964 #endif
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11965
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11966 /* 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
11967 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
11968
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11969 #ifdef HAVE_X11R6
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11970 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
11971 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
11972 /* 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
11973 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
11974 #endif
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11975 }
29948
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
11976
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
11977 #else /* not USE_XIM */
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
11978 dpyinfo->xim = NULL;
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
11979 #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
11980 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11981
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11982
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
11983 #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
11984
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11985 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
11986 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11987 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
11988 char *resource_name;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11989 };
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11990
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11991 /* 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
11992 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
11993 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
11994 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
11995
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11996 static void
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11997 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
11998 Display *display;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11999 XPointer client_data;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12000 XPointer call_data;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12001 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12002 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
12003 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
12004
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12005 /* 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
12006 if (dpyinfo->xim)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12007 return;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12008
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12009 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
12010
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12011 /* 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
12012 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
12013 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
12014 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12015 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
12016
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12017 BLOCK_INPUT;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12018 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
12019 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12020 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
12021
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12022 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
12023 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
12024 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12025 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
12026 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
12027 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
12028 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
12029 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12030 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
12031 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
12032 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12033 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12034 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12035
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12036 UNBLOCK_INPUT;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12037 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12038 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12039
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
12040 #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
12041
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12042
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12043 /* 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
12044 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
12045 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
12046 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
12047
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12048 static void
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12049 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
12050 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
12051 char *resource_name;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12052 {
29948
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
12053 #ifdef USE_XIM
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
12054 #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
12055 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
12056 int len;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12057
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12058 dpyinfo->xim = NULL;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12059 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
12060 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
12061 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
12062 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
12063 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
12064 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
12065 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
12066 xim_instantiate_callback,
29435
28c6b6d0ed6b (x_calc_absolute_position): Declare nchildren unsigned.
Dave Love <fx@gnu.org>
parents: 29393
diff changeset
12067 /* Fixme: This is XPointer in
28c6b6d0ed6b (x_calc_absolute_position): Declare nchildren unsigned.
Dave Love <fx@gnu.org>
parents: 29393
diff changeset
12068 XFree86 but (XPointer *) on
28c6b6d0ed6b (x_calc_absolute_position): Declare nchildren unsigned.
Dave Love <fx@gnu.org>
parents: 29393
diff changeset
12069 Tru64, at least. */
28c6b6d0ed6b (x_calc_absolute_position): Declare nchildren unsigned.
Dave Love <fx@gnu.org>
parents: 29393
diff changeset
12070 (XPointer) xim_inst);
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
12071 #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
12072 dpyinfo->xim = NULL;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12073 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
12074 #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
12075
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
12076 #else /* not USE_XIM */
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
12077 dpyinfo->xim = NULL;
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
12078 #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
12079 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12080
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12081
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12082 /* 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
12083
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12084 static void
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12085 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
12086 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
12087 {
29948
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
12088 #ifdef USE_XIM
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
12089 #ifdef HAVE_X11R6_XIM
34213
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
12090 if (dpyinfo->display)
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
12091 XUnregisterIMInstantiateCallback (dpyinfo->display, dpyinfo->xrdb,
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
12092 NULL, EMACS_CLASS,
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
12093 xim_instantiate_callback, NULL);
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
12094 #endif /* not HAVE_X11R6_XIM */
34213
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
12095 if (dpyinfo->display)
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
12096 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
12097 dpyinfo->xim = NULL;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12098 XFree (dpyinfo->xim_styles);
29948
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
12099 #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
12100 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12101
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
12102 #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
12103
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
12104
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12105
14826
eec0abb31126 Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 14801
diff changeset
12106 /* Calculate the absolute position in frame F
eec0abb31126 Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 14801
diff changeset
12107 from its current recorded position values and gravity. */
eec0abb31126 Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 14801
diff changeset
12108
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12109 void
7264
a701bffa0f9d (x_calc_absolute_position): Use size_hint_flags.
Richard M. Stallman <rms@gnu.org>
parents: 7262
diff changeset
12110 x_calc_absolute_position (f)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12111 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12112 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12113 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
12114 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
12115 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
12116 int this_window;
507a45c7e911 (x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents: 11807
diff changeset
12117
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
12118 /* 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
12119 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
12120 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
12121 return;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
12122
11896
507a45c7e911 (x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents: 11807
diff changeset
12123 #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
12124 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
12125 #else
507a45c7e911 (x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents: 11807
diff changeset
12126 this_window = FRAME_X_WINDOW (f);
507a45c7e911 (x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents: 11807
diff changeset
12127 #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
12128
70247ce8b381 (x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents: 4493
diff changeset
12129 /* 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
12130 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
12131 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
12132 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
12133 {
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
12134 int count;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
12135
4630
70247ce8b381 (x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents: 4493
diff changeset
12136 BLOCK_INPUT;
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
12137 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
12138 while (1)
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
12139 {
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
12140 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
12141 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
12142
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
12143 /* 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
12144 this_window,
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
12145 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
12146
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
12147 /* 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
12148 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
12149
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
12150 /* Child of win. */
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
12151 &child);
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
12152 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
12153 {
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
12154 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
12155 Window *newchildren;
29435
28c6b6d0ed6b (x_calc_absolute_position): Declare nchildren unsigned.
Dave Love <fx@gnu.org>
parents: 29393
diff changeset
12156 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
12157
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
12158 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
12159 &newparent, &newchildren, &nchildren))
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
12160 break;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
12161
23107
44eda932afcf (x_calc_absolute_position): Cast argument to XFree, in
Karl Heuer <kwzh@gnu.org>
parents: 23095
diff changeset
12162 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
12163
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
12164 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
12165 }
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
12166 else
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
12167 break;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
12168 }
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
12169
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
12170 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
12171 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
12172 }
70247ce8b381 (x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents: 4493
diff changeset
12173
70247ce8b381 (x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents: 4493
diff changeset
12174 /* 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
12175 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
12176 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
12177 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
12178 - 2 * f->output_data.x->border_width - win_x
eec0abb31126 Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 14801
diff changeset
12179 - PIXEL_WIDTH (f)
eec0abb31126 Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 14801
diff changeset
12180 + f->output_data.x->left_pos);
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12181
34099
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
12182 {
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
12183 int height = PIXEL_HEIGHT (f);
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
12184
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
12185 #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
12186 /* 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
12187 `-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
12188
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
12189 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
12190 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
12191 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
12192 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
12193 is right, though.
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
12194
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
12195 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
12196 2000-12-01, gerd. */
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
12197
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
12198 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
12199 #endif
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
12200
7262
68fc80bf10df (x_wm_set_size_hint): Don't try to handle negative positions.
Richard M. Stallman <rms@gnu.org>
parents: 7210
diff changeset
12201 if (flags & YNegative)
34099
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
12202 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
12203 - 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
12204 - win_y
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
12205 - height
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
12206 + 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
12207 }
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
12208
7409
fe56a02838ba (x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents: 7346
diff changeset
12209 /* 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
12210 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
12211 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
12212 f->output_data.x->size_hint_flags &= ~ (XNegative | YNegative);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12213 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12214
7409
fe56a02838ba (x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents: 7346
diff changeset
12215 /* 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
12216 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
12217 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
12218 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
12219 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
12220
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12221 void
6934
e0ab4f59004e (dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents: 6883
diff changeset
12222 x_set_offset (f, xoff, yoff, change_gravity)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12223 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12224 register int xoff, yoff;
6934
e0ab4f59004e (dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents: 6883
diff changeset
12225 int change_gravity;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12226 {
11901
8ecc60a02138 (x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents: 11896
diff changeset
12227 int modified_top, modified_left;
8ecc60a02138 (x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents: 11896
diff changeset
12228
11988
a1ce6f699967 (x_set_offset): Distinguish CHANGE_GRAVITY < 0 case.
Karl Heuer <kwzh@gnu.org>
parents: 11953
diff changeset
12229 if (change_gravity > 0)
7409
fe56a02838ba (x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents: 7346
diff changeset
12230 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
12231 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
12232 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
12233 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
12234 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
12235 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
12236 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
12237 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
12238 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
12239 }
7264
a701bffa0f9d (x_calc_absolute_position): Use size_hint_flags.
Richard M. Stallman <rms@gnu.org>
parents: 7262
diff changeset
12240 x_calc_absolute_position (f);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12241
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12242 BLOCK_INPUT;
11915
e2ab839155e1 (XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents: 11904
diff changeset
12243 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
12244
17519
5aa7011aa3d5 (x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents: 17371
diff changeset
12245 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
12246 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
12247 #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
12248 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
12249 /* 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
12250 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
12251 if (change_gravity != 0)
11901
8ecc60a02138 (x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents: 11896
diff changeset
12252 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
12253 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
12254 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
12255 }
17519
5aa7011aa3d5 (x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents: 17371
diff changeset
12256 #endif
11901
8ecc60a02138 (x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents: 11896
diff changeset
12257
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12258 #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
12259 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
12260 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
12261 #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
12262 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
12263 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
12264 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12265 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12266 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12267
35487
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12268
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12269 /* 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
12270 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
12271 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
12272 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
12273
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12274 static void
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12275 x_set_window_size_1 (f, change_gravity, cols, rows)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12276 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
12277 int change_gravity;
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
12278 int cols, rows;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12279 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12280 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
12281
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
12282 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
12283 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
12284 = (!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
12285 ? 0
8ad448b29c1c (x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents: 9101
diff changeset
12286 : 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
12287 ? 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
12288 : (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
12289 f->output_data.x->flags_areas_extra
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
12290 = 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
12291 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
12292 pixelheight = CHAR_TO_PIXEL_HEIGHT (f, rows);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12293
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
12294 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
12295 x_wm_set_size_hint (f, (long) 0, 0);
8781
98741404d3e0 Delete X11 conditionals.
Richard M. Stallman <rms@gnu.org>
parents: 8724
diff changeset
12296
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12297 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
12298 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
12299 pixelwidth, pixelheight);
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
12300
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
12301 /* 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
12302 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
12303 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
12304 ConfigureNotify event gets here.
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
12305
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
12306 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
12307 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
12308 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
12309 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
12310 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
12311
1c02364724aa (x_set_window_size): When calling change_frame_size, specify 1 for DELAY.
Richard M. Stallman <rms@gnu.org>
parents: 25101
diff changeset
12312 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
12313 a BLOCK_INPUT. */
25360
2f3ad0a21be5 Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents: 25328
diff changeset
12314 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
12315 PIXEL_WIDTH (f) = pixelwidth;
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
12316 PIXEL_HEIGHT (f) = pixelheight;
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
12317
14692
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
12318 /* 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
12319 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
12320 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
12321 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
12322 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
12323
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
12324 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
12325 }
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12326
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12327
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12328 /* 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
12329 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
12330 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
12331 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
12332
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12333 void
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12334 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
12335 struct frame *f;
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12336 int change_gravity;
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12337 int cols, rows;
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12338 {
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12339 BLOCK_INPUT;
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12340
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12341 #ifdef USE_X_TOOLKIT
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12342
36442
7fda58b1a204 (x_set_window_size): Don't use `None' with widgets; use
Gerd Moellmann <gerd@gnu.org>
parents: 36251
diff changeset
12343 if (f->output_data.x->widget != NULL)
35487
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12344 {
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12345 /* 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
12346 call to XtSetValues within EmacsFrameSetCharSize.
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12347 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
12348 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
12349 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
12350 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
12351 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
12352 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
12353 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
12354 }
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12355 else
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12356 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
12357
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12358 #else /* not USE_X_TOOLKIT */
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12359
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
12360 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
12361
14692
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
12362 #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
12363
7651
1569a13efdcd (x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents: 7602
diff changeset
12364 /* 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
12365 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
12366
14692
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
12367 /* 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
12368 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
12369 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
12370 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
12371 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
12372
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12373 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12374 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12375
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
12376 /* Mouse warping. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12377
7026
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
12378 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12379 x_set_mouse_position (f, x, y)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12380 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12381 int x, y;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12382 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12383 int pix_x, pix_y;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12384
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
12385 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
12386 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
12387
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
12388 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
12389 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
12390
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
12391 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
12392 if (pix_y > PIXEL_HEIGHT (f)) pix_y = PIXEL_HEIGHT (f);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12393
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12394 BLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12395
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12396 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
12397 0, 0, 0, 0, pix_x, pix_y);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12398 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12399 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12400
7026
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
12401 /* 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
12402
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
12403 void
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
12404 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
12405 struct frame *f;
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
12406 int pix_x, pix_y;
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
12407 {
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
12408 BLOCK_INPUT;
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
12409
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12410 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
12411 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
12412 UNBLOCK_INPUT;
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
12413 }
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
12414
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
12415 /* focus shifting, raising and lowering. */
7026
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
12416
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12417 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12418 x_focus_on_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12419 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12420 {
5156
fd78458b8c43 (XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents: 5018
diff changeset
12421 #if 0 /* This proves to be unpleasant. */
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12422 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
12423 #endif
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
12424 #if 0
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
12425 /* 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
12426 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
12427 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
12428 XSetInputFocus (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12429 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
12430 #endif /* ! 0 */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12431 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12432
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12433 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12434 x_unfocus_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12435 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12436 {
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
12437 #if 0
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12438 /* 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
12439 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
12440 XSetInputFocus (FRAME_X_DISPLAY (f), PointerRoot,
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12441 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
12442 #endif /* ! 0 */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12443 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12444
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12445 /* Raise frame F. */
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12446
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12447 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12448 x_raise_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12449 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12450 {
1658
452ba03935d7 * xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents: 1530
diff changeset
12451 if (f->async_visible)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12452 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12453 BLOCK_INPUT;
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12454 #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
12455 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
12456 #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
12457 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
12458 #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
12459 XFlush (FRAME_X_DISPLAY (f));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12460 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12461 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12462 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12463
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12464 /* Lower frame F. */
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12465
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12466 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12467 x_lower_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12468 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12469 {
1658
452ba03935d7 * xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents: 1530
diff changeset
12470 if (f->async_visible)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12471 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12472 BLOCK_INPUT;
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12473 #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
12474 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
12475 #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
12476 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
12477 #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
12478 XFlush (FRAME_X_DISPLAY (f));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12479 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12480 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12481 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12482
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
12483 static void
14411
bac274f178b0 (XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents: 14305
diff changeset
12484 XTframe_raise_lower (f, raise_flag)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
12485 FRAME_PTR f;
14411
bac274f178b0 (XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents: 14305
diff changeset
12486 int raise_flag;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
12487 {
14411
bac274f178b0 (XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents: 14305
diff changeset
12488 if (raise_flag)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
12489 x_raise_frame (f);
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
12490 else
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
12491 x_lower_frame (f);
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
12492 }
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
12493
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
12494 /* Change of visibility. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12495
12192
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
12496 /* 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
12497 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
12498 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
12499 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
12500 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
12501 finishes with it. */
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
12502
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12503 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12504 x_make_frame_visible (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12505 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12506 {
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
12507 Lisp_Object type;
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
12508 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
12509 int retry_count = 2;
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
12510
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
12511 retry:
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12512
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
12513 BLOCK_INPUT;
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
12514
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
12515 type = x_icon_type (f);
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
12516 if (!NILP (type))
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
12517 x_bitmap_icon (f, type);
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
12518
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12519 if (! FRAME_VISIBLE_P (f))
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12520 {
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
12521 /* 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
12522 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
12523 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
12524 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
12525 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
12526 && ! 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
12527 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
12528
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
12529 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
12530
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
12531 if (! EQ (Vx_no_window_manager, Qt))
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12532 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
12533 #ifdef USE_X_TOOLKIT
7167
2fa74c48e4e5 (x_make_frame_visible): Use XtMapWidget, not XtPopup.
Richard M. Stallman <rms@gnu.org>
parents: 7128
diff changeset
12534 /* 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
12535 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
12536 #else /* not USE_X_TOOLKIT */
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12537 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
12538 #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
12539 #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
12540 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
12541 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
12542 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
12543 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
12544 #endif
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
12545 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12546
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12547 XFlush (FRAME_X_DISPLAY (f));
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
12548
7959
224440646fa7 (make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents: 7935
diff changeset
12549 /* 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
12550 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
12551 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
12552 {
224440646fa7 (make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents: 7935
diff changeset
12553 Lisp_Object frame;
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12554 int count;
18528
73f4d9258f04 (x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents: 18347
diff changeset
12555 /* 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
12556 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
12557 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
12558 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
12559
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
12560 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
12561 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
12562
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
12563 /* This must come after we set COUNT. */
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
12564 UNBLOCK_INPUT;
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
12565
22907
43e290c6fb19 (x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents: 22773
diff changeset
12566 /* 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
12567
18008
d25d2472df51 (XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents: 17963
diff changeset
12568 /* 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
12569 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
12570 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
12571 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
12572
73f4d9258f04 (x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents: 18347
diff changeset
12573 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
12574 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
12575 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
12576
18630
3e414b9da546 (x_make_frame_visible): Don't move the frame
Richard M. Stallman <rms@gnu.org>
parents: 18528
diff changeset
12577 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
12578 && 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
12579 && previously_visible)
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
12580 {
22907
43e290c6fb19 (x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents: 22773
diff changeset
12581 Drawable rootw;
43e290c6fb19 (x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents: 22773
diff changeset
12582 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
12583 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
12584
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
12585 BLOCK_INPUT;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
12586
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12587 /* 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
12588 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
12589 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
12590 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
12591 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
12592 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
12593 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
12594 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
12595 &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
12596
43e290c6fb19 (x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents: 22773
diff changeset
12597 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
12598 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
12599 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
12600
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
12601 UNBLOCK_INPUT;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
12602 }
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
12603
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
12604 XSETFRAME (frame, f);
9337
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
12605
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12606 /* 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
12607 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
12608 MapNotify at all.. */
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12609 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
12610 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
12611 {
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12612 /* 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
12613 x_sync (f);
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12614
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12615 /* 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
12616 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
12617 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
12618 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
12619 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
12620 probably a bug. */
8682
42f95b1368ea (x_make_frame_visible): Call input_polling_used.
Richard M. Stallman <rms@gnu.org>
parents: 8652
diff changeset
12621 if (input_polling_used ())
8652
c2c1a477ddd5 Include keyboard.h.
Richard M. Stallman <rms@gnu.org>
parents: 8634
diff changeset
12622 {
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12623 /* 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
12624 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
12625 handler reset it. */
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
12626 extern void poll_for_input_1 P_ ((void));
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
12627 int old_poll_suppress_count = poll_suppress_count;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
12628 poll_suppress_count = 1;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
12629 poll_for_input_1 ();
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
12630 poll_suppress_count = old_poll_suppress_count;
8652
c2c1a477ddd5 Include keyboard.h.
Richard M. Stallman <rms@gnu.org>
parents: 8634
diff changeset
12631 }
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12632
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
12633 /* 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
12634 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
12635 }
31948
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
12636
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
12637 /* 2000-09-28: In
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
12638
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
12639 (let ((f (selected-frame)))
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
12640 (iconify-frame f)
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
12641 (raise-frame f))
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
12642
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
12643 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
12644 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
12645 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
12646 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
12647
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
12648 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
12649 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
12650 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12651 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12652
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12653 /* Change from mapped state to withdrawn state. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12654
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
12655 /* Make the frame visible (mapped and not iconified). */
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
12656
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12657 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12658 x_make_frame_invisible (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12659 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12660 {
7602
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
12661 Window window;
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
12662
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
12663 #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
12664 /* 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
12665 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
12666 #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
12667 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
12668 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12669
3284
a47979ffad1e (XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents: 3282
diff changeset
12670 /* 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
12671 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
12672 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
12673
6983
b18e5c09d7c3 (XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents: 6941
diff changeset
12674 #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
12675 if (! f->async_visible && ! f->async_iconified)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12676 return;
6983
b18e5c09d7c3 (XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents: 6941
diff changeset
12677 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12678
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12679 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
12680
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12681 /* 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
12682 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
12683 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
12684 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
12685 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
12686 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
12687
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
12688 #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
12689
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12690 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
12691 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
12692 {
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
12693 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
12694 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
12695 }
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
12696 #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
12697
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
12698 /* Tell the window manager what we're going to do. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12699 if (! EQ (Vx_no_window_manager, Qt))
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12700 {
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12701 XEvent unmap;
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12702
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12703 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
12704 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
12705 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
12706 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
12707 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
12708 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
12709 False,
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12710 SubstructureRedirectMaskSubstructureNotifyMask,
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12711 &unmap))
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12712 {
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12713 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
12714 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
12715 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12716 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12717
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12718 /* 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
12719 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
12720 #endif /* ! defined (HAVE_X11R4) */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12721
6983
b18e5c09d7c3 (XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents: 6941
diff changeset
12722 /* 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
12723 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
12724 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
12725 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
12726 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
12727 f->visible = 0;
b18e5c09d7c3 (XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents: 6941
diff changeset
12728 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
12729 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
12730 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
12731
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12732 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
12733
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12734 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12735 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12736
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12737 /* Change window state from mapped to iconified. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12738
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12739 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12740 x_iconify_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12741 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12742 {
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12743 int result;
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
12744 Lisp_Object type;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12745
3284
a47979ffad1e (XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents: 3282
diff changeset
12746 /* 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
12747 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
12748 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
12749
1658
452ba03935d7 * xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents: 1530
diff changeset
12750 if (f->async_iconified)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12751 return;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12752
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
12753 BLOCK_INPUT;
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
12754
13627
8873aa3451dd (XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents: 13598
diff changeset
12755 FRAME_SAMPLE_VISIBILITY (f);
8873aa3451dd (XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents: 13598
diff changeset
12756
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
12757 type = x_icon_type (f);
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
12758 if (!NILP (type))
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
12759 x_bitmap_icon (f, type);
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
12760
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12761 #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
12762
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
12763 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
12764 {
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
12765 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
12766 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
12767 /* 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
12768 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
12769 /* 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
12770 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
12771 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
12772 f->iconified = 1;
16753
ab63a77c3a23 (x_iconify_frame): Clear visible when we set iconified.
Richard M. Stallman <rms@gnu.org>
parents: 16491
diff changeset
12773 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
12774 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
12775 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
12776 UNBLOCK_INPUT;
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
12777 return;
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
12778 }
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
12779
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12780 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
12781 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
12782 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
12783 UNBLOCK_INPUT;
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12784
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12785 if (!result)
7602
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
12786 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
12787
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12788 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
12789 f->async_visible = 0;
ab63a77c3a23 (x_iconify_frame): Clear visible when we set iconified.
Richard M. Stallman <rms@gnu.org>
parents: 16491
diff changeset
12790
5740
48da4ed089e9 (x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents: 5737
diff changeset
12791
48da4ed089e9 (x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents: 5737
diff changeset
12792 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
12793 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
12794 UNBLOCK_INPUT;
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12795 #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
12796
7738
a810335742bb (x_iconify_frame): Call x_set_offset,
Richard M. Stallman <rms@gnu.org>
parents: 7706
diff changeset
12797 /* 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
12798 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
12799 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
12800 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
12801
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12802 /* 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
12803 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
12804
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12805 /* 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
12806 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
12807 {
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12808 XEvent message;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
12809
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
12810 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
12811 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
12812 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
12813 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
12814 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
12815
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12816 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
12817 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
12818 False,
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12819 SubstructureRedirectMask | SubstructureNotifyMask,
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12820 &message))
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12821 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12822 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
12823 error ("Can't notify window manager of iconification");
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12824 }
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12825 }
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12826
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
12827 /* 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
12828 IconicState. */
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12829 x_wm_set_window_state (f, IconicState);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12830
4304
b5014da888a8 (x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents: 4277
diff changeset
12831 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
12832 {
b5014da888a8 (x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents: 4277
diff changeset
12833 /* 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
12834 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
12835 }
b5014da888a8 (x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents: 4277
diff changeset
12836
1658
452ba03935d7 * xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents: 1530
diff changeset
12837 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
12838 f->async_visible = 0;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12839
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12840 XFlush (FRAME_X_DISPLAY (f));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12841 UNBLOCK_INPUT;
5740
48da4ed089e9 (x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents: 5737
diff changeset
12842 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12843 }
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12844
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
12845
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12846 /* 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
12847
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12848 void
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12849 x_free_frame_resources (f)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12850 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12851 {
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12852 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
12853
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12854 BLOCK_INPUT;
1810
bf618128d973 * xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents: 1803
diff changeset
12855
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
12856 /* 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
12857 commands to the X server. */
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12858 if (dpyinfo->display)
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12859 {
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12860 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
12861 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
12862
14830
34db919835d3 (x_destroy_window) [HAVE_X_I18N]: Free xic and xim of frame.
Richard M. Stallman <rms@gnu.org>
parents: 14826
diff changeset
12863 #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
12864 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
12865 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
12866 #endif
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12867
34210
2fe560117122 (x_destroy_window): Reset the frame's X window after
Gerd Moellmann <gerd@gnu.org>
parents: 34189
diff changeset
12868 if (FRAME_X_WINDOW (f))
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12869 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
12870
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12871 #ifdef USE_X_TOOLKIT
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12872 if (f->output_data.x->widget)
37212
5c27e50f91d1 (x_free_frame_resources) [USE_X_TOOLKIT]: Set
Gerd Moellmann <gerd@gnu.org>
parents: 37153
diff changeset
12873 {
5c27e50f91d1 (x_free_frame_resources) [USE_X_TOOLKIT]: Set
Gerd Moellmann <gerd@gnu.org>
parents: 37153
diff changeset
12874 XtDestroyWidget (f->output_data.x->widget);
5c27e50f91d1 (x_free_frame_resources) [USE_X_TOOLKIT]: Set
Gerd Moellmann <gerd@gnu.org>
parents: 37153
diff changeset
12875 f->output_data.x->widget = NULL;
5c27e50f91d1 (x_free_frame_resources) [USE_X_TOOLKIT]: Set
Gerd Moellmann <gerd@gnu.org>
parents: 37153
diff changeset
12876 }
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
12877 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
12878 #endif /* USE_X_TOOLKIT */
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12879
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
12880 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
12881 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
12882 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
12883 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
12884 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
12885 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
12886
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
12887 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
12888 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
12889 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
12890 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
12891 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
12892 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
12893 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
12894 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
12895
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12896 if (FRAME_FACE_CACHE (f))
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12897 free_frame_faces (f);
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12898
34318
d302f6935ff8 (x_destroy_window): Call x_free_gcs so that
Gerd Moellmann <gerd@gnu.org>
parents: 34250
diff changeset
12899 x_free_gcs (f);
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
12900 XFlush (FRAME_X_DISPLAY (f));
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
12901 }
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12902
17575
3f073536c09a Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17574
diff changeset
12903 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
12904 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
12905
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
12906 xfree (f->output_data.x);
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12907 f->output_data.x = NULL;
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12908
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
12909 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
12910 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
12911 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
12912 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
12913 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
12914 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
12915
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12916 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
12917 {
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12918 dpyinfo->mouse_face_beg_row
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12919 = dpyinfo->mouse_face_beg_col = -1;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12920 dpyinfo->mouse_face_end_row
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12921 = dpyinfo->mouse_face_end_col = -1;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12922 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
12923 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
12924 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
12925 }
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
12926
1810
bf618128d973 * xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents: 1803
diff changeset
12927 UNBLOCK_INPUT;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12928 }
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12929
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12930
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12931 /* Destroy the X window of frame F. */
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12932
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12933 void
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12934 x_destroy_window (f)
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12935 struct frame *f;
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12936 {
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12937 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
12938
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12939 /* 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
12940 commands to the X server. */
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12941 if (dpyinfo->display != 0)
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12942 x_free_frame_resources (f);
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12943
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12944 dpyinfo->reference_count--;
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12945 }
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
12946
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12947
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
12948 /* Setting window manager hints. */
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
12949
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12950 /* 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
12951 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
12952 that the window now has.
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12953 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
12954 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
12955
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12956 void
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12957 x_wm_set_size_hint (f, flags, user_position)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12958 struct frame *f;
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12959 long flags;
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12960 int user_position;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12961 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12962 XSizeHints size_hints;
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12963
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12964 #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
12965 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
12966 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
12967 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
12968 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
12969 #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
12970 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
12971 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12972
7187
ca0102511d80 (x_wm_set_size_hint): Don't set PMaxSize.
Richard M. Stallman <rms@gnu.org>
parents: 7169
diff changeset
12973 /* 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
12974 size_hints.flags = PResizeInc | PMinSize /* | PMaxSize */;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12975
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
12976 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
12977 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
12978
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
12979 #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
12980 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
12981 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
12982 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
12983 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
12984 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
12985 #else /* not USE_X_TOOLKIT */
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12986 size_hints.height = PIXEL_HEIGHT (f);
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12987 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
12988 #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
12989
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
12990 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
12991 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
12992 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
12993 = 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
12994 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
12995 = 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
12996
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12997 /* Calculate the base and minimum sizes.
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12998
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12999 (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
13000 Instead we copy the values that the widgets are using, below.) */
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13001 #ifndef USE_X_TOOLKIT
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
13002 {
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
13003 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
13004 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
13005
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
13006 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
13007 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
13008
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
13009 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
13010
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
13011 /* 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
13012 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
13013 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
13014 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
13015 zero-row, zero-column frame.
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
13016
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
13017 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
13018 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
13019 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
13020
cd3d59155bf7 * xterm.c (x_wm_set_size_hint): Set the base_width and base_height
Jim Blandy <jimb@redhat.com>
parents: 1077
diff changeset
13021 #ifdef HAVE_X11R4
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
13022 size_hints.flags |= PBaseSize;
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
13023 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
13024 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
13025 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
13026 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
13027 #else
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
13028 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
13029 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
13030 #endif
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
13031 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13032
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13033 /* 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
13034 if (flags)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13035 {
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13036 size_hints.flags |= flags;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13037 goto no_read;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13038 }
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13039 #endif /* not USE_X_TOOLKIT */
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13040
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13041 {
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13042 XSizeHints hints; /* Sometimes I hate X Windows... */
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13043 long supplied_return;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13044 int value;
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
13045
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
13046 #ifdef HAVE_X11R4
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13047 value = XGetWMNormalHints (FRAME_X_DISPLAY (f), window, &hints,
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13048 &supplied_return);
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
13049 #else
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13050 value = XGetNormalHints (FRAME_X_DISPLAY (f), window, &hints);
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13051 #endif
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13052
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13053 #ifdef USE_X_TOOLKIT
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13054 size_hints.base_height = hints.base_height;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13055 size_hints.base_width = hints.base_width;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13056 size_hints.min_height = hints.min_height;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13057 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
13058 #endif
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
13059
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13060 if (flags)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13061 size_hints.flags |= flags;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13062 else
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13063 {
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13064 if (value == 0)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13065 hints.flags = 0;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13066 if (hints.flags & PSize)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13067 size_hints.flags |= PSize;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13068 if (hints.flags & PPosition)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13069 size_hints.flags |= PPosition;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13070 if (hints.flags & USPosition)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13071 size_hints.flags |= USPosition;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13072 if (hints.flags & USSize)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13073 size_hints.flags |= USSize;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13074 }
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13075 }
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13076
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13077 #ifndef USE_X_TOOLKIT
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
13078 no_read:
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13079 #endif
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
13080
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
13081 #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
13082 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
13083 size_hints.flags |= PWinGravity;
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
13084
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
13085 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
13086 {
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
13087 size_hints.flags &= ~ PPosition;
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
13088 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
13089 }
4777
21ed9c9bb210 (w_wn_set_size_hint): Make recent window gravity addition
Brian Fox <bfox@gnu.org>
parents: 4696
diff changeset
13090 #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
13091
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
13092 #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
13093 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
13094 #else
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
13095 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
13096 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13097 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13098
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13099 /* Used for IconicState or NormalState */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13100
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
13101 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
13102 x_wm_set_window_state (f, state)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
13103 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13104 int state;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13105 {
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13106 #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
13107 Arg al[1];
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
13108
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
13109 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
13110 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
13111 #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
13112 Window window = FRAME_X_WINDOW (f);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13113
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
13114 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
13115 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
13116
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
13117 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
13118 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13119 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13120
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
13121 void
9542
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
13122 x_wm_set_icon_pixmap (f, pixmap_id)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
13123 struct frame *f;
9542
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
13124 int pixmap_id;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13125 {
15117
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
13126 Pixmap icon_pixmap;
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
13127
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13128 #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
13129 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
13130 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13131
9542
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
13132 if (pixmap_id > 0)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
13133 {
15117
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
13134 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
13135 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
13136 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
13137 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
13138 {
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
13139 /* 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
13140 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
13141 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
13142 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
13143 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
13144 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
13145 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
13146 #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
13147 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
13148 #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
13149 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
13150 #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
13151 }
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
13152
15117
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
13153 #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
13154
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
13155 {
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
13156 Arg al[1];
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
13157 XtSetArg (al[0], XtNiconPixmap, icon_pixmap);
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
13158 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
13159 }
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
13160
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
13161 #else /* not USE_X_TOOLKIT */
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
13162
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
13163 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
13164 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
13165
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
13166 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13167 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13168
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
13169 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
13170 x_wm_set_icon_position (f, icon_x, icon_y)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
13171 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13172 int icon_x, icon_y;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13173 {
7806
ef7a60d59543 (x_wm_set_icon_position, x_wm_set_icon_pixmap):
Richard M. Stallman <rms@gnu.org>
parents: 7801
diff changeset
13174 #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
13175 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
13176 #else
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
13177 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
13178 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13179
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
13180 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
13181 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
13182 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
13183
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
13184 XSetWMHints (FRAME_X_DISPLAY (f), window, &f->output_data.x->wm_hints);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13185 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13186
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13187
24991
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 Fonts
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13190 ***********************************************************************/
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13191
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13192 /* 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
13193
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13194 struct font_info *
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13195 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
13196 FRAME_PTR f;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13197 int font_idx;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13198 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13199 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
13200 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13201
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13202
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13203 /* 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
13204
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13205 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
13206 to be listed.
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13207
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13208 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
13209
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13210 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
13211 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
13212 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
13213
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13214 Lisp_Object
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13215 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
13216 struct frame *f;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13217 Lisp_Object pattern;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13218 int size;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13219 int maxnames;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13220 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13221 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
13222 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
13223 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
13224 = 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
13225 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
13226 int try_XLoadQueryFont = 0;
24633
c7d905dca6ba (x_list_fonts): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 24618
diff changeset
13227 int count;
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13228 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
13229
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13230 if (size < 0)
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13231 {
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13232 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
13233 size = 0;
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13234 }
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13235
19447
34099ec680df (x_list_fonts): Adjusted for the name change of
Kenichi Handa <handa@m17n.org>
parents: 19276
diff changeset
13236 patterns = Fassoc (pattern, Valternate_fontname_alist);
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13237 if (NILP (patterns))
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13238 patterns = Fcons (pattern, Qnil);
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13239
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
13240 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
13241 /* 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
13242 try_XLoadQueryFont = 1;
19062
9cc02044117d (x_list_fonts): Request at least 10 fonts by XListFonts.
Kenichi Handa <handa@m17n.org>
parents: 19060
diff changeset
13243
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13244 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
13245 {
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13246 int num_fonts;
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
13247 char **names = NULL;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13248
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13249 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
13250 /* 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
13251 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
13252 ((((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
13253 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
13254 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
13255 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
13256 list = Fassoc (key, tem);
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13257 if (!NILP (list))
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13258 {
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13259 list = Fcdr_safe (list);
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13260 /* 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
13261 goto label_cached;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13262 }
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13263
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13264 /* 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
13265
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13266 BLOCK_INPUT;
24618
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
13267 count = x_catch_errors (dpy);
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
13268
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
13269 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
13270 {
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
13271 XFontStruct *font;
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
13272 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
13273
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
13274 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
13275 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
13276 {
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
13277 /* 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
13278 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
13279 font = NULL;
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
13280 x_clear_errors (dpy);
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
13281 }
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
13282
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
13283 if (font
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
13284 && 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
13285 {
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
13286 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
13287 int len = strlen (name);
22530
6d2e22a16952 (x_list_fonts): Keep alloca usage simple.
Karl Heuer <kwzh@gnu.org>
parents: 22522
diff changeset
13288 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
13289
23095
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
13290 /* 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
13291 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
13292 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
13293 if (len == 0)
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
13294 try_XLoadQueryFont = 0;
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
13295 else
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
13296 {
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
13297 num_fonts = 1;
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
13298 names = (char **) alloca (sizeof (char *));
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
13299 /* 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
13300 simple var. */
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
13301 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
13302 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
13303 XFree (name);
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
13304 }
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
13305 }
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
13306 else
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
13307 try_XLoadQueryFont = 0;
22943
5493321d4526 (x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 22907
diff changeset
13308
5493321d4526 (x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 22907
diff changeset
13309 if (font)
5493321d4526 (x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 22907
diff changeset
13310 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
13311 }
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
13312
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
13313 if (!try_XLoadQueryFont)
24618
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
13314 {
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
13315 /* 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
13316 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
13317 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
13318 &num_fonts);
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
13319 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
13320 {
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
13321 /* 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
13322 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
13323 names = NULL;
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
13324 x_clear_errors (dpy);
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
13325 }
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
13326 }
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
13327
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
13328 x_uncatch_errors (dpy, count);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13329 UNBLOCK_INPUT;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13330
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13331 if (names)
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 int i;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13334
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13335 /* 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
13336 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
13337 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
13338 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13339 int width = 0;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13340 char *p = names[i];
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13341 int average_width = -1, dashes = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13342
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13343 /* 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
13344 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
13345 (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
13346 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
13347 ignore it. */
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13348 while (*p)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13349 if (*p++ == '-')
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13350 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13351 dashes++;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13352 if (dashes == 7) /* PIXEL_SIZE field */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13353 width = atoi (p);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13354 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
13355 average_width = atoi (p);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13356 }
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13357
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13358 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
13359 || dashes < 14 || average_width != 0)
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13360 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13361 tem = build_string (names[i]);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13362 if (NILP (Fassoc (tem, list)))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13363 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13364 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
13365 && ((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
13366 (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
13367 >= 0))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13368 /* 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
13369 width of this font. */
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13370 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
13371 else
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13372 /* 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
13373 list = Fcons (Fcons (tem, Qnil), list);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13374 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13375 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13376 }
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
13377 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
13378 XFreeFontNames (names);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13379 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13380
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13381 /* 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
13382 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
13383 = 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
13384
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13385 label_cached:
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13386 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
13387
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13388 newlist = second_best = Qnil;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13389 /* 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
13390 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
13391 {
19060
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
13392 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
13393
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13394 tem = XCAR (list);
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13395
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13396 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
13397 continue;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13398 if (!size)
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13399 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13400 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
13401 continue;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13402 }
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13403
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13404 if (!INTEGERP (XCDR (tem)))
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13405 {
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13406 /* 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
13407 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
13408 XFontStruct *thisinfo;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13409
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13410 BLOCK_INPUT;
24618
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
13411 count = x_catch_errors (dpy);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13412 thisinfo = XLoadQueryFont (dpy,
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13413 XSTRING (XCAR (tem))->data);
24618
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
13414 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
13415 {
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
13416 /* 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
13417 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
13418 thisinfo = NULL;
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
13419 x_clear_errors (dpy);
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
13420 }
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
13421 x_uncatch_errors (dpy, count);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13422 UNBLOCK_INPUT;
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 if (thisinfo)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13425 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13426 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
13427 = (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
13428 ? 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
13429 : 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
13430 XFreeFont (dpy, thisinfo);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13431 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13432 else
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13433 /* 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
13434 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
13435 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
13436 XCDR (tem) = make_number (0);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13437 }
19060
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
13438
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13439 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
13440 if (found_size == size)
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13441 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
13442 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
13443 {
19060
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
13444 if (NILP (second_best))
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13445 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
13446 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
13447 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13448 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
13449 || 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
13450 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
13451 }
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
13452 else
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
13453 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13454 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
13455 && 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
13456 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
13457 }
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13458 }
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13459 }
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13460 if (!NILP (newlist))
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13461 break;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13462 else if (!NILP (second_best))
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13463 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13464 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
13465 break;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13466 }
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13467 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13468
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13469 return newlist;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13470 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13471
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13472
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13473 #if GLYPH_DEBUG
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13474
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13475 /* 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
13476 font table. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13477
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13478 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13479 x_check_font (f, font)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13480 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13481 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13482 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13483 int i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13484 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
13485
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13486 xassert (font != NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13487
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13488 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
13489 if (dpyinfo->font_table[i].name
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13490 && font == dpyinfo->font_table[i].font)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13491 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13492
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13493 xassert (i < dpyinfo->n_fonts);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13494 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13495
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13496 #endif /* GLYPH_DEBUG != 0 */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13497
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13498 /* 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
13499 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
13500 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
13501 "-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
13502 have font->min_bounds.width == 0. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13503
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13504 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13505 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
13506 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13507 int *w, *h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13508 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13509 *h = FONT_HEIGHT (font);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13510 *w = font->min_bounds.width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13511
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13512 /* 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
13513 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
13514 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
13515 if (*w <= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13516 *w = font->max_bounds.width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13517 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13518
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13519
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13520 /* 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
13521 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
13522 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
13523 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
13524 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
13525
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13526 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13527 x_compute_min_glyph_bounds (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13528 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13529 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13530 int i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13531 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
13532 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13533 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
13534 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
13535
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13536 dpyinfo->smallest_font_height = 100000;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13537 dpyinfo->smallest_char_width = 100000;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13538
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13539 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
13540 if (dpyinfo->font_table[i].name)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13541 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13542 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
13543 int w, h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13544
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13545 font = (XFontStruct *) fontp->font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13546 xassert (font != (XFontStruct *) ~0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13547 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
13548
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13549 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
13550 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
13551 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13552
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13553 xassert (dpyinfo->smallest_char_width > 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13554 && dpyinfo->smallest_font_height > 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13555
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13556 return (dpyinfo->n_fonts == 1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13557 || dpyinfo->smallest_char_width < old_width
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13558 || dpyinfo->smallest_font_height < old_height);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13559 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13560
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13561
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13562 /* 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
13563 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
13564 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
13565 If loading is failed, return NULL. */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13566
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13567 struct font_info *
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13568 x_load_font (f, fontname, size)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13569 struct frame *f;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13570 register char *fontname;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13571 int size;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13572 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13573 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
13574 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
13575 int count;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13576
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13577 /* 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
13578 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
13579 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
13580 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
13581
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13582 if (!NILP (font_names))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13583 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13584 Lisp_Object tail;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13585 int i;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13586
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13587 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
13588 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
13589 if (dpyinfo->font_table[i].name
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13590 && (!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
13591 XSTRING (XCAR (tail))->data)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13592 || !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
13593 XSTRING (XCAR (tail))->data)))
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13594 return (dpyinfo->font_table + i);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13595 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13596
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13597 /* 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
13598 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13599 char *full_name;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13600 XFontStruct *font;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13601 struct font_info *fontp;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13602 unsigned long value;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13603 int i;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13604
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13605 /* 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
13606 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
13607 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
13608 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
13609 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
13610 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
13611 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
13612
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13613 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
13614 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
13615 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
13616 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
13617 {
d4ee4399e999 (x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24224
diff changeset
13618 /* 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
13619 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
13620 font = NULL;
d4ee4399e999 (x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24224
diff changeset
13621 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
13622 }
d4ee4399e999 (x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24224
diff changeset
13623 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
13624 UNBLOCK_INPUT;
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
13625 if (!font)
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13626 return NULL;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13627
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13628 /* 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
13629 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
13630 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
13631 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13632
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13633 /* 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
13634 if (i == dpyinfo->n_fonts
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13635 && 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
13636 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13637 int sz;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13638 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
13639 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
13640 dpyinfo->font_table
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13641 = (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
13642 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13643
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13644 fontp = dpyinfo->font_table + i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13645 if (i == dpyinfo->n_fonts)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13646 ++dpyinfo->n_fonts;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13647
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13648 /* 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
13649 BLOCK_INPUT;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13650 fontp->font = font;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13651 fontp->font_idx = i;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13652 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
13653 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
13654
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13655 /* 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
13656 full_name = 0;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13657 if (XGetFontProperty (font, XA_FONT, &value))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13658 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13659 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
13660 char *p = name;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13661 int dashes = 0;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13662
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13663 /* 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
13664 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
13665 so don't use it.
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13666 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
13667 stored in them. */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13668 while (*p)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13669 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13670 if (*p == '-')
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13671 dashes++;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13672 p++;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13673 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13674
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13675 if (dashes >= 13)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13676 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13677 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
13678 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
13679 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13680
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13681 XFree (name);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13682 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13683
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13684 if (full_name != 0)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13685 fontp->full_name = full_name;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13686 else
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13687 fontp->full_name = fontp->name;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13688
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13689 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
13690 fontp->height = FONT_HEIGHT (font);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13691
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13692 if (NILP (font_names))
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13693 {
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13694 /* 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
13695 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
13696 the cache for x_list_fonts. */
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13697 Lisp_Object lispy_name = build_string (fontname);
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13698 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
13699 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
13700 Qnil);
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13701
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13702 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
13703 = Fcons (Fcons (key,
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13704 Fcons (Fcons (lispy_full_name,
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13705 make_number (fontp->size)),
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13706 Qnil)),
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13707 XCDR (dpyinfo->name_list_element));
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13708 if (full_name)
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13709 {
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13710 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
13711 Qnil);
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13712 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
13713 = Fcons (Fcons (key,
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13714 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
13715 make_number (fontp->size)),
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13716 Qnil)),
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
13717 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
13718 }
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13719 }
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
13720
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13721 /* 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
13722 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
13723 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
13724 (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
13725 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
13726 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
13727 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
13728 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
13729 fontp->encoding[1]
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13730 = (font->max_byte1 == 0
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13731 /* 1-byte font */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13732 ? (font->min_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13733 ? (font->max_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13734 ? 0 /* 0x20..0x7F */
18057
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
13735 : 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
13736 : 1) /* 0xA0..0xFF */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13737 /* 2-byte font */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13738 : (font->min_byte1 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13739 ? (font->max_byte1 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13740 ? (font->min_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13741 ? (font->max_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13742 ? 0 /* 0x2020..0x7F7F */
18057
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
13743 : 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
13744 : 3) /* 0x20A0..0x7FFF */
18057
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
13745 : 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
13746 : (font->min_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13747 ? (font->max_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13748 ? 2 /* 0xA020..0xFF7F */
18057
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
13749 : 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
13750 : 1))); /* 0xA0A0..0xFFFF */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13751
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13752 fontp->baseline_offset
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13753 = (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
13754 ? (long) value : 0);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13755 fontp->relative_compose
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13756 = (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
13757 ? (long) value : 0);
17103
7cde34a6424e (dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents: 17050
diff changeset
13758 fontp->default_ascent
7cde34a6424e (dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents: 17050
diff changeset
13759 = (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
13760 ? (long) value : 0);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13761
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13762 /* 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
13763 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
13764 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
13765 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
13766 glyph matrix reallocation necessary. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13767 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
13768 UNBLOCK_INPUT;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13769 return fontp;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13770 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13771 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13772
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13773
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13774 /* 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
13775 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
13776
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13777 struct font_info *
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13778 x_query_font (f, fontname)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13779 struct frame *f;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13780 register char *fontname;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13781 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13782 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
13783 int i;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13784
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13785 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
13786 if (dpyinfo->font_table[i].name
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13787 && (!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
13788 || !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
13789 return (dpyinfo->font_table + i);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13790 return NULL;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13791 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13792
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13793
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13794 /* 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
13795 `encoder' of the structure. */
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
13796
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
13797 void
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
13798 x_find_ccl_program (fontp)
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
13799 struct font_info *fontp;
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
13800 {
25068
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
13801 Lisp_Object list, elt;
21548
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
13802
31694
97c48afc4c5a (x_draw_image_glyph_string): Remove a comment describing
Gerd Moellmann <gerd@gnu.org>
parents: 31614
diff changeset
13803 elt = Qnil;
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13804 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
13805 {
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13806 elt = XCAR (list);
21548
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
13807 if (CONSP (elt)
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13808 && STRINGP (XCAR (elt))
32640
9adbb2160f48 (x_find_ccl_program): Check also fontp->full_name.
Kenichi Handa <handa@m17n.org>
parents: 32607
diff changeset
13809 && ((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
13810 >= 0)
9adbb2160f48 (x_find_ccl_program): Check also fontp->full_name.
Kenichi Handa <handa@m17n.org>
parents: 32607
diff changeset
13811 || (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
13812 >= 0)))
25068
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
13813 break;
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
13814 }
31694
97c48afc4c5a (x_draw_image_glyph_string): Remove a comment describing
Gerd Moellmann <gerd@gnu.org>
parents: 31614
diff changeset
13815
25068
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
13816 if (! NILP (list))
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
13817 {
25085
23813e3a69b8 (x_find_ccl_program): Add casting.
Kenichi Handa <handa@m17n.org>
parents: 25083
diff changeset
13818 struct ccl_program *ccl
23813e3a69b8 (x_find_ccl_program): Add casting.
Kenichi Handa <handa@m17n.org>
parents: 25083
diff changeset
13819 = (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
13820
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13821 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
13822 xfree (ccl);
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
13823 else
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
13824 fontp->font_encoder = ccl;
21548
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
13825 }
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
13826 }
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
13827
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13828
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13829
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13830 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13831 Initialization
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13832 ***********************************************************************/
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
13833
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13834 #ifdef USE_X_TOOLKIT
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13835 static XrmOptionDescRec emacs_options[] = {
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13836 {"-geometry", ".geometry", XrmoptionSepArg, NULL},
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13837 {"-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
13838
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13839 {"-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
13840 XrmoptionSepArg, NULL},
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13841 {"-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
13842
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13843 {"-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
13844 {"-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
13845 {"-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
13846 {"-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
13847 {"-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
13848 {"-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
13849 {"-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
13850 };
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13851 #endif /* USE_X_TOOLKIT */
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13852
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13853 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
13854
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13855 #ifdef MULTI_KBOARD
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13856 /* 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
13857 the screen number from the server number. */
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13858 static int
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13859 same_x_server (name1, name2)
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13860 char *name1, *name2;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13861 {
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13862 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
13863 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
13864 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
13865 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
13866
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13867 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
13868 && 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
13869 length_until_period++;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13870
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13871 /* 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
13872 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
13873 name1 += 4;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13874 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
13875 name2 += 4;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13876 /* 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
13877 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
13878 && name1[system_name_length] == ':')
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13879 name1 += system_name_length;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13880 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
13881 && name2[system_name_length] == ':')
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13882 name2 += system_name_length;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13883 /* 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
13884 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
13885 && name1[length_until_period] == ':')
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13886 name1 += length_until_period;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13887 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
13888 && name2[length_until_period] == ':')
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13889 name2 += length_until_period;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13890
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13891 for (; *name1 != '\0' && *name1 == *name2; name1++, name2++)
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13892 {
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13893 if (*name1 == ':')
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13894 seen_colon++;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13895 if (seen_colon && *name1 == '.')
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13896 return 1;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13897 }
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13898 return (seen_colon
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13899 && (*name1 == '.' || *name1 == '\0')
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13900 && (*name2 == '.' || *name2 == '\0'));
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13901 }
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13902 #endif
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13903
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
13904 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
13905 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
13906 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
13907 char *xrm_option;
10e818a0248a (x_term_init): New args xrm_option and resource_string.
Richard M. Stallman <rms@gnu.org>
parents: 7738
diff changeset
13908 char *resource_name;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13909 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
13910 int connection;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13911 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
13912 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
13913 XrmDatabase xrdb;
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
13914
11997
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
13915 BLOCK_INPUT;
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
13916
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13917 if (!x_initialized)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13918 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13919 x_initialize ();
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13920 x_initialized = 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13921 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13922
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13923 #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
13924 /* 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
13925 errors with X11R5:
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
13926 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
13927 on protocol request 18skiloaf.
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
13928 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
13929 #ifdef HAVE_X11XTR6
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
13930 XtSetLanguageProc (NULL, NULL, NULL);
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
13931 #endif
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
13932
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13933 {
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13934 int argc = 0;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13935 char *argv[3];
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13936
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13937 argv[0] = "";
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13938 argc = 1;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13939 if (xrm_option)
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13940 {
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13941 argv[argc++] = "-xrm";
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13942 argv[argc++] = xrm_option;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13943 }
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13944 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
13945 resource_name, EMACS_CLASS,
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13946 emacs_options, XtNumber (emacs_options),
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13947 &argc, argv);
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
13948
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
13949 #ifdef HAVE_X11XTR6
14963
6ac4f300f9b4 Include locale.h if HAVE_SETLOCALE.
Richard M. Stallman <rms@gnu.org>
parents: 14946
diff changeset
13950 /* 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
13951 fixup_locale ();
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
13952 #endif
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13953 }
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13954
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13955 #else /* not USE_X_TOOLKIT */
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
13956 #ifdef HAVE_X11R5
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
13957 XSetLocaleModifiers ("");
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
13958 #endif
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13959 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
13960 #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
13961
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13962 /* Detect failure. */
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13963 if (dpy == 0)
11997
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
13964 {
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
13965 UNBLOCK_INPUT;
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
13966 return 0;
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
13967 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13968
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13969 /* 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
13970
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13971 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
13972 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
13973
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13974 #ifdef MULTI_KBOARD
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13975 {
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13976 struct x_display_info *share;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13977 Lisp_Object tail;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13978
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13979 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
13980 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
13981 if (same_x_server (XSTRING (XCAR (XCAR (tail)))->data,
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13982 XSTRING (display_name)->data))
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13983 break;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13984 if (share)
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13985 dpyinfo->kboard = share->kboard;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13986 else
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13987 {
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13988 dpyinfo->kboard = (KBOARD *) xmalloc (sizeof (KBOARD));
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13989 init_kboard (dpyinfo->kboard);
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
13990 if (!EQ (XSYMBOL (Qvendor_specific_keysyms)->function, Qunbound))
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
13991 {
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
13992 char *vendor = ServerVendor (dpy);
28307
1d4a11a5f39d (x_term_init): Unblock input around call1.
Gerd Moellmann <gerd@gnu.org>
parents: 28281
diff changeset
13993 UNBLOCK_INPUT;
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
13994 dpyinfo->kboard->Vsystem_key_alist
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
13995 = call1 (Qvendor_specific_keysyms,
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
13996 build_string (vendor ? vendor : ""));
28307
1d4a11a5f39d (x_term_init): Unblock input around call1.
Gerd Moellmann <gerd@gnu.org>
parents: 28281
diff changeset
13997 BLOCK_INPUT;
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
13998 }
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
13999
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
14000 dpyinfo->kboard->next_kboard = all_kboards;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
14001 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
14002 /* 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
14003 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
14004 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
14005 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
14006 current_kboard = dpyinfo->kboard;
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
14007 }
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
14008 dpyinfo->kboard->reference_count++;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
14009 }
10652
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
14010 #endif
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
14011
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14012 /* 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
14013 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
14014 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
14015
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14016 /* 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
14017 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
14018 x_display_name_list);
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
14019 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
14020
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14021 dpyinfo->display = dpy;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14022
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14023 #if 0
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14024 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
14025 #endif /* ! 0 */
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14026
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14027 dpyinfo->x_id_name
21244
50929073a0ba Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 21017
diff changeset
14028 = (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
14029 + 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
14030 + 2);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14031 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
14032 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
14033
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
14034 /* 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
14035 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
14036
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
14037 /* 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
14038 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
14039 = 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
14040
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
14041 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
14042 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
14043 #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
14044 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
14045 #else
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
14046 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
14047 #endif
11162
95b70c82ec51 (x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents: 11122
diff changeset
14048 /* 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
14049 all versions. */
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14050 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
14051
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
14052 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
14053 DefaultScreen (dpyinfo->display));
27991
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
14054 select_visual (dpyinfo);
27985
4ba445af210b (x_term_init): Set Colormap member of x_display_info
Gerd Moellmann <gerd@gnu.org>
parents: 27974
diff changeset
14055 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
14056 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
14057 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
14058 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
14059 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
14060 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
14061 dpyinfo->icon_bitmap_id = -1;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14062 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
14063 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
14064 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
14065 dpyinfo->bitmaps = 0;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14066 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
14067 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
14068 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
14069 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
14070 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
14071 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
14072 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
14073 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
14074 dpyinfo->mouse_face_window = Qnil;
36587
d9bb01d5dbbb (note_mouse_highlight): Call mouse_face_overlay_overlaps
Gerd Moellmann <gerd@gnu.org>
parents: 36555
diff changeset
14075 dpyinfo->mouse_face_overlay = Qnil;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14076 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
14077 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
14078 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
14079 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
14080 dpyinfo->x_highlight_frame = 0;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14081 dpyinfo->image_cache = make_image_cache ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14082
27985
4ba445af210b (x_term_init): Set Colormap member of x_display_info
Gerd Moellmann <gerd@gnu.org>
parents: 27974
diff changeset
14083 /* 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
14084 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
14085 {
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
14086 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
14087 {
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
14088 Lisp_Object value;
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
14089 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
14090 build_string ("privateColormap"),
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
14091 build_string ("PrivateColormap"),
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
14092 Qnil, Qnil);
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
14093 if (STRINGP (value)
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
14094 && (!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
14095 || !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
14096 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
14097 }
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
14098 }
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
14099 else
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
14100 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
14101 dpyinfo->visual, AllocNone);
27985
4ba445af210b (x_term_init): Set Colormap member of x_display_info
Gerd Moellmann <gerd@gnu.org>
parents: 27974
diff changeset
14102
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14103 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14104 int screen_number = XScreenNumberOfScreen (dpyinfo->screen);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14105 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
14106 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
14107 dpyinfo->resy = pixels * 25.4 / mm;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14108 pixels = DisplayWidth (dpyinfo->display, screen_number);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14109 mm = DisplayWidthMM (dpyinfo->display, screen_number);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14110 dpyinfo->resx = pixels * 25.4 / mm;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14111 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14112
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
14113 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
14114 = 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
14115 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
14116 = 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
14117 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
14118 = 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
14119 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
14120 = 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
14121 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
14122 = 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
14123 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
14124 = 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
14125 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
14126 = 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
14127 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
14128 = 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
14129 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
14130 = 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
14131 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
14132 = 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
14133 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
14134 = XInternAtom (dpyinfo->display, "TEXT", False);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
14135 dpyinfo->Xatom_COMPOUND_TEXT
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
14136 = 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
14137 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
14138 = 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
14139 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
14140 = 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
14141 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
14142 = 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
14143 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
14144 = 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
14145 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
14146 = 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
14147 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
14148 = 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
14149 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
14150 = 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
14151 /* For properties of font. */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
14152 dpyinfo->Xatom_PIXEL_SIZE
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
14153 = XInternAtom (dpyinfo->display, "PIXEL_SIZE", False);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
14154 dpyinfo->Xatom_MULE_BASELINE_OFFSET
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
14155 = 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
14156 dpyinfo->Xatom_MULE_RELATIVE_COMPOSE
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
14157 = 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
14158 dpyinfo->Xatom_MULE_DEFAULT_ASCENT
7cde34a6424e (dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents: 17050
diff changeset
14159 = 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
14160
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14161 /* Ghostscript support. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14162 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
14163 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
14164
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14165 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
14166 False);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14167
11162
95b70c82ec51 (x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents: 11122
diff changeset
14168 dpyinfo->cut_buffers_initialized = 0;
95b70c82ec51 (x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents: 11122
diff changeset
14169
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
14170 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
14171 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
14172
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
14173 {
18705
c4f2eab8e736 (x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents: 18646
diff changeset
14174 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
14175
c4f2eab8e736 (x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents: 18646
diff changeset
14176 null_bits[0] = 0x00;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
14177
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
14178 dpyinfo->null_pixel
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
14179 = XCreatePixmapFromBitmapData (dpyinfo->display, dpyinfo->root_window,
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
14180 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
14181 1);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
14182 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
14183
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14184 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14185 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
14186 extern char *gray_bitmap_bits;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14187 dpyinfo->gray
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14188 = XCreatePixmapFromBitmapData (dpyinfo->display, dpyinfo->root_window,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14189 gray_bitmap_bits,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14190 gray_bitmap_width, gray_bitmap_height,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14191 (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
14192 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14193
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
14194 #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
14195 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
14196 #endif
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
14197
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9565
diff changeset
14198 #ifdef subprocesses
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9565
diff changeset
14199 /* 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
14200 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
14201 add_keyboard_wait_descriptor (connection);
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9565
diff changeset
14202 #endif
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
14203
4147
c6657758fb6f * xterm.c (x_term_init): Adjust message printed when we can't
Jim Blandy <jimb@redhat.com>
parents: 3951
diff changeset
14204 #ifndef F_SETOWN_BUG
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14205 #ifdef F_SETOWN
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14206 #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
14207 /* 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
14208 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
14209 #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
14210 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
14211 #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
14212 #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
14213 #endif /* F_SETOWN_BUG */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14214
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14215 #ifdef SIGIO
11994
b4dd8ca308dd (x_term_init): Call init_sigio only if interrupt_input.
Karl Heuer <kwzh@gnu.org>
parents: 11988
diff changeset
14216 if (interrupt_input)
b4dd8ca308dd (x_term_init): Call init_sigio only if interrupt_input.
Karl Heuer <kwzh@gnu.org>
parents: 11988
diff changeset
14217 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
14218 #endif /* ! defined (SIGIO) */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14219
15904
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
14220 #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
14221 #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
14222 /* 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
14223 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
14224 {
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
14225 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
14226 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
14227 Font font;
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
14228 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
14229
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
14230 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
14231 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
14232 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
14233 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
14234 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
14235 to.addr = (XPointer)&font;
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
14236 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
14237 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
14238 abort ();
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
14239 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
14240 XrmPutLineResource (&xrdb, "Emacs.dialog.*.font: 9x15");
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
14241 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
14242 }
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
14243 #endif
19021
6f150e46a5fd (x_term_init) [! HAVE_X11R5]: Don't try to use XtCvtStringToFont.
Richard M. Stallman <rms@gnu.org>
parents: 18996
diff changeset
14244 #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
14245
28139
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
14246 /* See if we should run in synchronous mode. This is useful
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
14247 for debugging X code. */
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
14248 {
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
14249 Lisp_Object value;
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
14250 value = display_x_get_resource (dpyinfo,
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
14251 build_string ("synchronous"),
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
14252 build_string ("Synchronous"),
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
14253 Qnil, Qnil);
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
14254 if (STRINGP (value)
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
14255 && (!strcmp (XSTRING (value)->data, "true")
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
14256 || !strcmp (XSTRING (value)->data, "on")))
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
14257 XSynchronize (dpyinfo->display, True);
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
14258 }
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
14259
11997
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
14260 UNBLOCK_INPUT;
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
14261
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14262 return dpyinfo;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14263 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14264
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14265 /* 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
14266 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
14267
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14268 void
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14269 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
14270 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
14271 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14272 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
14273
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14274 /* 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
14275 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
14276 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
14277 && 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
14278 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
14279 else
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14280 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14281 Lisp_Object tail;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14282
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14283 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
14284 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
14285 {
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
14286 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
14287 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
14288 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
14289 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14290 }
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
14291 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
14292 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14293 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14294
27524
67501e6e8b34 (x_delete_display): Update next_noop_dpyinfo to ensure
Gerd Moellmann <gerd@gnu.org>
parents: 27500
diff changeset
14295 if (next_noop_dpyinfo == dpyinfo)
67501e6e8b34 (x_delete_display): Update next_noop_dpyinfo to ensure
Gerd Moellmann <gerd@gnu.org>
parents: 27500
diff changeset
14296 next_noop_dpyinfo = dpyinfo->next;
67501e6e8b34 (x_delete_display): Update next_noop_dpyinfo to ensure
Gerd Moellmann <gerd@gnu.org>
parents: 27500
diff changeset
14297
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14298 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
14299 x_display_list = dpyinfo->next;
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
14300 else
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
14301 {
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
14302 struct x_display_info *tail;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
14303
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
14304 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
14305 if (tail->next == dpyinfo)
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
14306 tail->next = tail->next->next;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
14307 }
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
14308
12771
6f07c79d9a05 (x_delete_display) [AIX]: Don't call XRmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 12750
diff changeset
14309 #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
14310 #ifndef AIX /* On AIX, XCloseDisplay calls this. */
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
14311 XrmDestroyDatabase (dpyinfo->xrdb);
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
14312 #endif
12771
6f07c79d9a05 (x_delete_display) [AIX]: Don't call XRmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 12750
diff changeset
14313 #endif
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
14314 #ifdef MULTI_KBOARD
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
14315 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
14316 delete_kboard (dpyinfo->kboard);
10652
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
14317 #endif
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
14318 #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
14319 if (dpyinfo->xim)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
14320 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
14321 #endif
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
14322
10652
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
14323 xfree (dpyinfo->font_table);
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
14324 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
14325 xfree (dpyinfo->color_cells);
10652
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
14326 xfree (dpyinfo);
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14327 }
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
14328
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14329
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14330 /* 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
14331
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14332 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
14333 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14334 x_produce_glyphs,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14335 x_write_glyphs,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14336 x_insert_glyphs,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14337 x_clear_end_of_line,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14338 x_scroll_run,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14339 x_after_update_window_line,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14340 x_update_window_begin,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14341 x_update_window_end,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14342 XTcursor_to,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14343 x_flush,
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
14344 x_clear_mouse_face,
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
14345 x_get_glyph_overhangs,
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
14346 x_fix_overlapping_area
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14347 };
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14348
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
14349 void
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14350 x_initialize ()
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14351 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14352 rif = &x_redisplay_interface;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14353
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14354 clear_frame_hook = x_clear_frame;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14355 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
14356 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
14357 delete_glyphs_hook = x_delete_glyphs;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14358 ring_bell_hook = XTring_bell;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14359 reset_terminal_modes_hook = XTreset_terminal_modes;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14360 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
14361 update_begin_hook = x_update_begin;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14362 update_end_hook = x_update_end;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14363 set_terminal_window_hook = XTset_terminal_window;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14364 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
14365 frame_up_to_date_hook = XTframe_up_to_date;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14366 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
14367 mouse_position_hook = XTmouse_position;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
14368 frame_rehighlight_hook = XTframe_rehighlight;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
14369 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
14370 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
14371 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
14372 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
14373 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
14374 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
14375
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
14376 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
14377 char_ins_del_ok = 1;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14378 line_ins_del_ok = 1; /* we'll just blt 'em */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14379 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
14380 memory_below_frame = 0; /* we don't remember what scrolls
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14381 off the bottom */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14382 baud_rate = 19200;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14383
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14384 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
14385 last_tool_bar_item = -1;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14386 any_help_event_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14387
4476
e7de1b007447 (x_term_init): Set the hooks before we call Fset_input_mode.
Richard M. Stallman <rms@gnu.org>
parents: 4304
diff changeset
14388 /* 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
14389 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
14390
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
14391 #ifdef USE_X_TOOLKIT
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
14392 XtToolkitInitialize ();
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
14393
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
14394 Xt_app_con = XtCreateApplicationContext ();
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
14395
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
14396 /* Register a converter from strings to pixels, which uses
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
14397 Emacs' color allocation infrastructure. */
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
14398 XtAppSetTypeConverter (Xt_app_con,
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
14399 XtRString, XtRPixel, cvt_string_to_pixel,
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
14400 cvt_string_to_pixel_args,
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
14401 XtNumber (cvt_string_to_pixel_args),
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
14402 XtCacheByDisplay, cvt_pixel_dtor);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
14403
12494
bfbe2490dbf0 (x_initialize) [USE_X_TOOLKIT]: Set fallback resources.
Richard M. Stallman <rms@gnu.org>
parents: 12431
diff changeset
14404 XtAppSetFallbackResources (Xt_app_con, Xt_default_resources);
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
14405
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
14406 /* Install an asynchronous timer that processes Xt timeout events
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
14407 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
14408 timeouts internally, for example the LessTif menu bar, or the
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
14409 Xaw3d scroll bar. When Xt timouts aren't processed, these
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
14410 widgets don't behave normally. */
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
14411 {
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
14412 EMACS_TIME interval;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
14413 EMACS_SET_SECS_USECS (interval, 0, 100000);
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
14414 start_atimer (ATIMER_CONTINUOUS, interval, x_process_timeouts, 0);
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
14415 }
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
14416 #endif
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
14417
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
14418 #ifdef USE_TOOLKIT_SCROLL_BARS
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
14419 xaw3d_arrow_scroll = False;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
14420 xaw3d_pick_top = True;
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
14421 #endif
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
14422
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
14423 /* 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
14424 original error handler. */
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
14425 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
14426 XSetIOErrorHandler (x_io_error_quitter);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14427
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14428 /* Disable Window Change signals; they are handled by X events. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14429 #ifdef SIGWINCH
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14430 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
14431 #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
14432
10743
6977bff3ff38 (x_display_bar_cursor): Use frame's cursor_width.
Richard M. Stallman <rms@gnu.org>
parents: 10652
diff changeset
14433 signal (SIGPIPE, x_connection_signal);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14434 }
395
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
14435
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14436
395
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
14437 void
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
14438 syms_of_xterm ()
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
14439 {
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
14440 staticpro (&x_error_message_string);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
14441 x_error_message_string = Qnil;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
14442
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
14443 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
14444 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
14445
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
14446 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
14447 last_mouse_scroll_bar = Qnil;
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
14448
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
14449 staticpro (&Qvendor_specific_keysyms);
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
14450 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
14451
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
14452 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
14453 last_mouse_press_frame = Qnil;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14454
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
14455 help_echo = Qnil;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14456 staticpro (&help_echo);
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
14457 help_echo_object = Qnil;
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
14458 staticpro (&help_echo_object);
30302
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
14459 help_echo_window = Qnil;
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
14460 staticpro (&help_echo_window);
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
14461 previous_help_echo = Qnil;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14462 staticpro (&previous_help_echo);
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
14463 help_echo_pos = -1;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14464
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14465 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
14466 "*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
14467 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
14468 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
14469 x_stretch_cursor_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14470
37153
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
14471 DEFVAR_BOOL ("x-use-underline-position-properties",
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
14472 &x_use_underline_position_properties,
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
14473 "*Non-nil means make use of UNDERLINE_POSITION font properties.\n\
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
14474 Nil means ignore them. If you encounter fonts with bogus\n\
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
14475 UNDERLINE_POSITION font properties, for example 7x13 on XFree prior\n\
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
14476 to 4.1, set this to nil.");
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
14477 x_use_underline_position_properties = 1;
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
14478
34869
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
14479 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
14480 "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
14481 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
14482 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
14483 #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
14484 #ifdef USE_MOTIF
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
14485 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
14486 #elif defined HAVE_XAW3D
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
14487 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
14488 #else
34869
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
14489 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
14490 #endif
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
14491 #else
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
14492 Vx_toolkit_scroll_bars = Qnil;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14493 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14494
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14495 staticpro (&last_mouse_motion_frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
14496 last_mouse_motion_frame = Qnil;
395
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
14497 }
14694
41de9b2640a1 (X_CONNECTION_LOCK_FLAG): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 14692
diff changeset
14498
41de9b2640a1 (X_CONNECTION_LOCK_FLAG): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 14692
diff changeset
14499 #endif /* not HAVE_X_WINDOWS */