annotate src/xterm.c @ 30700:730f55a93973

(note_mouse_highlight): Update call to overlays_at.
author Miles Bader <miles@gnu.org>
date Tue, 08 Aug 2000 23:56:29 +0000
parents 319c3bad8ada
children e25bfc3f618c
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.
28629
437e522505fb (x_produce_glyphs) <ASCII chars>: Take into account
Gerd Moellmann <gerd@gnu.org>
parents: 28443
diff changeset
2 Copyright (C) 1989, 93, 94, 95, 96, 1997, 1998, 1999, 2000
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3 Free Software Foundation, Inc.
286
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"
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
71 #include "ccl.h"
23515
1e52542fb338 Include frame.h before fontset.h.
Kenichi Handa <handa@m17n.org>
parents: 23162
diff changeset
72 #include "frame.h"
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
73 #include "dispextern.h"
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
74 #include "fontset.h"
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
75 #include "termhooks.h"
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
76 #include "termopts.h"
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
77 #include "termchar.h"
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
78 #if 0
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
79 #include "sink.h"
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
80 #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
81 #endif /* ! 0 */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
82 #include "gnu.h"
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
83 #include "disptab.h"
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
84 #include "buffer.h"
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
85 #include "window.h"
8652
c2c1a477ddd5 Include keyboard.h.
Richard M. Stallman <rms@gnu.org>
parents: 8634
diff changeset
86 #include "keyboard.h"
8848
48b3ac951c53 Add #include "intervals.h"
Karl Heuer <kwzh@gnu.org>
parents: 8781
diff changeset
87 #include "intervals.h"
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
88 #include "process.h"
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
89 #include "atimer.h"
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
90
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
91 #ifdef USE_X_TOOLKIT
15117
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
92 #include <X11/Shell.h>
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
93 #endif
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
94
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
95 #ifdef HAVE_SYS_TIME_H
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
96 #include <sys/time.h>
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
97 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
98 #ifdef HAVE_UNISTD_H
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
99 #include <unistd.h>
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
100 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
101
15117
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
102 #ifdef USE_X_TOOLKIT
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
103
30321
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
104 extern void free_frame_menubar P_ ((struct frame *));
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
105 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
106 int));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
107
13507
9a9f459075af (HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
108 #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
109 #define HACK_EDITRES
6941
a914781ef58a (Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents: 6934
diff changeset
110 extern void _XEditResCheckMessages ();
13507
9a9f459075af (HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
111 #endif /* not NO_EDITRES */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
112
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
113 /* 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
114
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
115 #ifdef USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
116 #if defined USE_MOTIF
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
117 #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
118 #include <Xm/ScrollBar.h>
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
119 #include <Xm/ScrollBarP.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
14305
3cc44eaf9ebf (x_connection_signal): Explicitly check the thread interlock
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
151 #ifdef SOLARIS2
15292
558d7f9e06ef [SOLARIS2]: Include string.h.
Karl Heuer <kwzh@gnu.org>
parents: 15200
diff changeset
152 /* memmove will be defined as a macro in Xfuncs.h unless
558d7f9e06ef [SOLARIS2]: Include string.h.
Karl Heuer <kwzh@gnu.org>
parents: 15200
diff changeset
153 <string.h> is included beforehand. The declaration for memmove in
558d7f9e06ef [SOLARIS2]: Include string.h.
Karl Heuer <kwzh@gnu.org>
parents: 15200
diff changeset
154 <string.h> will cause a syntax error when Xfuncs.h later includes it. */
558d7f9e06ef [SOLARIS2]: Include string.h.
Karl Heuer <kwzh@gnu.org>
parents: 15200
diff changeset
155 #include <string.h>
558d7f9e06ef [SOLARIS2]: Include string.h.
Karl Heuer <kwzh@gnu.org>
parents: 15200
diff changeset
156 #endif
558d7f9e06ef [SOLARIS2]: Include string.h.
Karl Heuer <kwzh@gnu.org>
parents: 15200
diff changeset
157
14522
9cee3e7c6468 (min, max): Don't define if already defined.
Richard M. Stallman <rms@gnu.org>
parents: 14489
diff changeset
158 #ifndef min
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
159 #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
160 #endif
9cee3e7c6468 (min, max): Don't define if already defined.
Richard M. Stallman <rms@gnu.org>
parents: 14489
diff changeset
161 #ifndef max
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
162 #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
163 #endif
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 #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
166
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
167 #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
168
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
169
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
170 /* Bitmaps for truncated lines. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
171
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
172 enum bitmap_type
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
173 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
174 NO_BITMAP,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
175 LEFT_TRUNCATION_BITMAP,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
176 RIGHT_TRUNCATION_BITMAP,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
177 OVERLAY_ARROW_BITMAP,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
178 CONTINUED_LINE_BITMAP,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
179 CONTINUATION_LINE_BITMAP,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
180 ZV_LINE_BITMAP
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
181 };
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
182
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
183 /* 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
184 `indicate-empty-lines' is non-nil. */
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 zv_width 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
187 #define zv_height 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
188 static unsigned char zv_bits[] = {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
189 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
190
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
191 /* An arrow like this: `<-'. */
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 left_width 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
194 #define left_height 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
195 static unsigned char left_bits[] = {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
196 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
197
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
198 /* Right truncation arrow bitmap `->'. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
199
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
200 #define right_width 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
201 #define right_height 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
202 static unsigned char right_bits[] = {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
203 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
204
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
205 /* Marker for continued 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 continued_width 8
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
208 #define continued_height 8
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
209 static unsigned char continued_bits[] = {
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
210 0x3c, 0x7c, 0xc0, 0xe4, 0xfc, 0x7c, 0x3c, 0x7c};
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 /* Marker for continuation lines. */
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 #define continuation_width 8
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
215 #define continuation_height 8
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
216 static unsigned char continuation_bits[] = {
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
217 0x3c, 0x3e, 0x03, 0x27, 0x3f, 0x3e, 0x3c, 0x3e};
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
218
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
219 /* Overlay arrow bitmap. */
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
220
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
221 #if 0
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
222 /* A bomb. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
223 #define ov_width 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
224 #define ov_height 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
225 static unsigned char ov_bits[] = {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
226 0x30, 0x08, 0x3c, 0x7e, 0x7a, 0x7a, 0x62, 0x3c};
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
227 #else
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
228 /* A triangular arrow. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
229 #define ov_width 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
230 #define ov_height 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
231 static unsigned char ov_bits[] = {
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
232 0x03, 0x0f, 0x1f, 0x3f, 0x3f, 0x1f, 0x0f, 0x03};
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
233
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
234 #endif
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 extern Lisp_Object Qhelp_echo;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
237
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
238
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
239 /* Non-zero means Emacs uses toolkit scroll bars. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
240
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
241 int x_toolkit_scroll_bars_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
242
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
243 /* 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
244 (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
245
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
246 static Lisp_Object help_echo;
30302
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
247 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
248 static Lisp_Object help_echo_object;
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
249 static int help_echo_pos;
24991
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 /* Temporary variable for XTread_socket. */
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 static Lisp_Object previous_help_echo;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
254
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
255 /* 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
256 start. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
257
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
258 static int any_help_event_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
259
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
260 /* 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
261 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
262 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
263
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
264 int x_stretch_cursor_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
265
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
266 /* 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
267 use. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
268
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
269 struct x_display_info *x_display_list;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
270
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
271 /* 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
272 . 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
273 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
274 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
275
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
276 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
277
2474
86c8a6e08fd4 Fix typo in comment delimiter.
Richard M. Stallman <rms@gnu.org>
parents: 2468
diff changeset
278 /* 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
279 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
280 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
281 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
282
2468
35aa32e1a003 * xterm.c (updating_frame): Declare this extern instead of static,
Jim Blandy <jimb@redhat.com>
parents: 2439
diff changeset
283 extern struct frame *updating_frame;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
284
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
285 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
286
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
287 /* 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
288
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
289 struct frame *pending_autoraise_frame;
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
290
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
291 #ifdef USE_X_TOOLKIT
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
292 /* The application context for Xt use. */
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
293 XtAppContext Xt_app_con;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
294 static String Xt_default_resources[] = {0};
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
295 #endif /* USE_X_TOOLKIT */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
296
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
297 /* 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
298 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
299 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
300
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
301 struct cursor_pos output_cursor;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
302
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
303 /* 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
304
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
305 static int toolkit_scroll_bar_interaction;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
306
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
307 /* Mouse movement.
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
308
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
309 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
310 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
311 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
312 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
313
c99dd01d9334 (note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 14963
diff changeset
314 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
315
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
316 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
317 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
318 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
319 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
320 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
321 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
322 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
323 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
324 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
325 is off. */
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
326
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
327 /* 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
328
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
329 FRAME_PTR last_mouse_frame;
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
330 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
331 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
332
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
333 /* 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
334
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
335 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
336 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
337 an ordinary motion.
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
338
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
339 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
340 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
341 event. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
342
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
343 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
344
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
345 /* 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
346 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
347 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
348 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
349 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
350 it's somewhat accurate. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
351
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
352 static Time last_mouse_movement_time;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
353
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
354 /* 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
355 events. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
356
9337
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
357 #ifdef __STDC__
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
358 static int volatile input_signal_count;
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
359 #else
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
360 static int input_signal_count;
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
361 #endif
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
362
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
363 /* Used locally within XTread_socket. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
364
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
365 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
366
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
367 /* 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
368
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
369 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
370 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
371
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
372 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
373
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
374 /* Tells if a window manager is present or not. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
375
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
376 extern Lisp_Object Vx_no_window_manager;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
377
6941
a914781ef58a (Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents: 6934
diff changeset
378 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
379
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
380 extern int errno;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
381
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
382 /* 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
383
1841
338e4ffdb54b (XTread_socket): Support extra_keyboard_modifiers.
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
384 extern int extra_keyboard_modifiers;
338e4ffdb54b (XTread_socket): Support extra_keyboard_modifiers.
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
385
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
386 static Lisp_Object Qvendor_specific_keysyms;
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
387
30321
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
388 extern XrmDatabase x_load_resources P_ ((Display *, char *, char *, char *));
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
389 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
390
24991
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 /* 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
393 glyphs in x_draw_glyphs. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
394
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
395 enum draw_glyphs_face
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
396 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
397 DRAW_NORMAL_TEXT,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
398 DRAW_INVERSE_VIDEO,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
399 DRAW_CURSOR,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
400 DRAW_MOUSE_FACE,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
401 DRAW_IMAGE_RAISED,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
402 DRAW_IMAGE_SUNKEN
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
403 };
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
404
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 *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
412 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
413 static struct glyph *x_y_to_hpos_vpos P_ ((struct window *, int, int,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
414 int *, int *, int *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
415 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
416 static void note_mouse_highlight P_ ((struct frame *, int, int));
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
417 static void note_tool_bar_highlight P_ ((struct frame *f, int, int));
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
418 static void x_handle_tool_bar_click P_ ((struct frame *, XButtonEvent *));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
419 static void show_mouse_face P_ ((struct x_display_info *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
420 enum draw_glyphs_face));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
421 static int x_io_error_quitter P_ ((Display *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
422 int x_catch_errors P_ ((Display *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
423 void x_uncatch_errors P_ ((Display *, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
424 void x_lower_frame P_ ((struct frame *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
425 void x_scroll_bar_clear P_ ((struct frame *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
426 int x_had_errors_p P_ ((Display *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
427 void x_wm_set_size_hint P_ ((struct frame *, long, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
428 void x_raise_frame P_ ((struct frame *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
429 void x_set_window_size P_ ((struct frame *, int, int, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
430 void x_wm_set_window_state P_ ((struct frame *, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
431 void x_wm_set_icon_pixmap P_ ((struct frame *, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
432 void x_initialize P_ ((void));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
433 static void x_font_min_bounds P_ ((XFontStruct *, int *, int *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
434 static int x_compute_min_glyph_bounds P_ ((struct frame *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
435 static void x_draw_phys_cursor_glyph P_ ((struct window *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
436 struct glyph_row *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
437 enum draw_glyphs_face));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
438 static void x_update_end P_ ((struct frame *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
439 static void XTframe_up_to_date P_ ((struct frame *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
440 static void XTreassert_line_highlight P_ ((int, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
441 static void x_change_line_highlight P_ ((int, int, int, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
442 static void XTset_terminal_modes P_ ((void));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
443 static void XTreset_terminal_modes P_ ((void));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
444 static void XTcursor_to P_ ((int, int, int, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
445 static void x_write_glyphs P_ ((struct glyph *, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
446 static void x_clear_end_of_line P_ ((int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
447 static void x_clear_frame P_ ((void));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
448 static void x_clear_cursor P_ ((struct window *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
449 static void frame_highlight P_ ((struct frame *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
450 static void frame_unhighlight P_ ((struct frame *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
451 static void x_new_focus_frame P_ ((struct x_display_info *, struct frame *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
452 static void XTframe_rehighlight P_ ((struct frame *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
453 static void x_frame_rehighlight P_ ((struct x_display_info *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
454 static void x_draw_hollow_cursor P_ ((struct window *, struct glyph_row *));
28321
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
455 static void x_draw_bar_cursor P_ ((struct window *, struct glyph_row *, int));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
456 static int x_intersect_rectangles P_ ((XRectangle *, XRectangle *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
457 XRectangle *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
458 static void expose_frame P_ ((struct frame *, int, int, int, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
459 static void expose_window_tree P_ ((struct window *, XRectangle *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
460 static void expose_window P_ ((struct window *, XRectangle *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
461 static void expose_area P_ ((struct window *, struct glyph_row *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
462 XRectangle *, enum glyph_row_area));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
463 static void expose_line P_ ((struct window *, struct glyph_row *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
464 XRectangle *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
465 static void x_update_cursor_in_window_tree P_ ((struct window *, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
466 static void x_update_window_cursor P_ ((struct window *, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
467 static void x_erase_phys_cursor P_ ((struct window *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
468 void x_display_and_set_cursor P_ ((struct window *, int, int, int, int, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
469 static void x_draw_bitmap P_ ((struct window *, struct glyph_row *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
470 enum bitmap_type));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
471
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
472 static void x_clip_to_row P_ ((struct window *, struct glyph_row *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
473 GC, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
474 static int x_phys_cursor_in_rect_p P_ ((struct window *, XRectangle *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
475 static void x_draw_row_bitmaps P_ ((struct window *, struct glyph_row *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
476 static void note_overwritten_text_cursor P_ ((struct window *, int, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
477 static void x_flush P_ ((struct frame *f));
30321
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
478 static void x_update_begin P_ ((struct frame *));
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
479 static void x_update_window_begin P_ ((struct window *));
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
480 static void x_draw_vertical_border P_ ((struct window *));
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
481 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
482 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
483 static void x_produce_stretch_glyph P_ ((struct it *));
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
484
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
485
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
486 /* 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
487
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
488 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
489 x_flush (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
490 struct frame *f;
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 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
493 if (f == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
494 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
495 Lisp_Object rest, frame;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
496 FOR_EACH_FRAME (rest, frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
497 x_flush (XFRAME (frame));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
498 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
499 else if (FRAME_X_P (f))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
500 XFlush (FRAME_X_DISPLAY (f));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
501 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
502 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
503
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 /* 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
506 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
507 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
508 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
509 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
510 performance. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
511
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
512 #define XFlush(DISPLAY) (void) 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
513
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
514
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
515 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
516 Debugging
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
12192
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
519 #if 0
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
520
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
521 /* 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
522 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
523
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
524 struct record
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
525 {
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
526 char *locus;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
527 int type;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
528 };
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 event_record[100];
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 int event_record_index;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
533
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
534 record_event (locus, type)
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
535 char *locus;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
536 int type;
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 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
539 event_record_index = 0;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
540
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
541 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
542 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
543 event_record_index++;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
544 }
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
545
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
546 #endif /* 0 */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
547
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
548
12192
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
549
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
550 /* 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
551
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
552 struct x_display_info *
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
553 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
554 Display *dpy;
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
555 {
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
556 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
557
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
558 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
559 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
560 return dpyinfo;
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 return 0;
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
563 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
564
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
565
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
566
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
567 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
568 Starting and ending an update
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
569 ***********************************************************************/
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 /* 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
572 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
573 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
574 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
575 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
576
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
577 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
578 x_update_begin (f)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
579 struct frame *f;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
580 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
581 /* Nothing to do. */
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
584
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
585 /* 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
586 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
587 position of W. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
588
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
589 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
590 x_update_window_begin (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
591 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
592 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
593 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
594 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
595
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
596 updated_window = w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
597 set_output_cursor (&w->cursor);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
598
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
599 BLOCK_INPUT;
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
600
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
601 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
602 {
6660
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
603 /* 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
604 display_info->mouse_face_defer = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
605
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
606 /* 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
607 highlighting. */
10274
83aaf59dabbe (XTupdate_begin): Fix backward test in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 10223
diff changeset
608 if (FRAME_GARBAGED_P (f))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
609 display_info->mouse_face_window = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
610
30153
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
611 #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
612 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
613 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
614 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
615 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
616 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
617
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
618 /* 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
619 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
620 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
621 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
622 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
623 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
624 && 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
625 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
626 int i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
627
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
628 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
629 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
630 break;
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
631
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
632 if (i < w->desired_matrix->nrows)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
633 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
634 }
30153
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
635 #endif /* 0 */
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
636 }
8781
98741404d3e0 Delete X11 conditionals.
Richard M. Stallman <rms@gnu.org>
parents: 8724
diff changeset
637
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
638 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
639 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
640
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
641
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
642 /* 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
643 have vertical scroll bars. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
644
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
645 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
646 x_draw_vertical_border (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
647 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
648 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
649 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
650
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
651 /* 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
652 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
653 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
654 neighbor will suffice as a border. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
655 if (!WINDOW_RIGHTMOST_P (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
656 && !FRAME_HAS_VERTICAL_SCROLL_BARS (f))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
657 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
658 int x0, x1, y0, y1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
659
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
660 window_box_edges (w, -1, &x0, &y0, &x1, &y1);
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
661 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
662 y1 -= 1;
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 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
665 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
666 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
667 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
668
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
669
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
670 /* 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
671
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
672 Draw vertical borders between horizontally adjacent windows, and
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
673 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
674
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
675 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
676 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
677 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
678
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
679 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
680 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
681 here. */
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
682
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
683 static void
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
684 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
685 struct window *w;
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
686 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
687 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
688 if (!w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
689 {
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
690 struct x_display_info *dpyinfo
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
691 = FRAME_X_DISPLAY_INFO (XFRAME (w->frame));
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
692
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
693 BLOCK_INPUT;
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
694
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
695 /* If a row with mouse-face was overwritten, arrange for
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
696 XTframe_up_to_date to redisplay the mouse highlight. */
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
697 if (mouse_face_overwritten_p)
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
698 {
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
699 dpyinfo->mouse_face_beg_row = dpyinfo->mouse_face_beg_col = -1;
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
700 dpyinfo->mouse_face_end_row = dpyinfo->mouse_face_end_col = -1;
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
701 dpyinfo->mouse_face_window = Qnil;
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
702 }
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
703
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
704 if (cursor_on_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
705 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
706 output_cursor.vpos,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
707 output_cursor.x, output_cursor.y);
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
708
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
709 x_draw_vertical_border (w);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
710 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
711 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
712
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
713 updated_window = NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
714 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
715
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
716
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
717 /* 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
718 update_end. */
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 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
721 x_update_end (f)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
722 struct frame *f;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
723 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
724 /* Mouse highlight may be displayed again. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
725 FRAME_X_DISPLAY_INFO (f)->mouse_face_defer = 0;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
726
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
727 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
728 XFlush (FRAME_X_DISPLAY (f));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
729 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
730 }
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
731
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
732
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
733 /* 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
734 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
735 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
736
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
737 static void
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
738 XTframe_up_to_date (f)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
739 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
740 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
741 if (FRAME_X_P (f))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
742 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
743 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
744
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
745 if (dpyinfo->mouse_face_deferred_gc
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
746 || f == dpyinfo->mouse_face_mouse_frame)
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 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
749 if (dpyinfo->mouse_face_mouse_frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
750 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
751 dpyinfo->mouse_face_mouse_x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
752 dpyinfo->mouse_face_mouse_y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
753 dpyinfo->mouse_face_deferred_gc = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
754 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
755 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
756 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
757 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
758
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
759
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
760 /* 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
761 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
762 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
763 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
764 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
765 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
766
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
767 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
768 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
769 struct glyph_row *desired_row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
770 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
771 struct window *w = updated_window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
772
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
773 xassert (w);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
774
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
775 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
776 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
777 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
778 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
779
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
780 /* 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
781 full-width rows stays visible in the internal border. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
782 if (windows_or_buffers_changed)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
783 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
784 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
785 int width = FRAME_INTERNAL_BORDER_WIDTH (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
786 int height = desired_row->visible_height;
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
787 int x = (window_box_right (w, -1)
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
788 + FRAME_X_RIGHT_FLAGS_AREA_WIDTH (f));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
789 int y = WINDOW_TO_FRAME_PIXEL_Y (w, max (0, desired_row->y));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
790
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
791 XClearArea (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
792 x, y, width, height, False);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
793 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
794
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
795 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
796 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
797 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
798
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
799
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
800 /* Draw the bitmap WHICH in one of the areas to the left or right of
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
801 window W. ROW is the glyph row for which to display the bitmap; it
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
802 determines the vertical position at which the bitmap has to be
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
803 drawn. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
804
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
805 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
806 x_draw_bitmap (w, row, which)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
807 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
808 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
809 enum bitmap_type which;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
810 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
811 struct frame *f = XFRAME (WINDOW_FRAME (w));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
812 Display *display = FRAME_X_DISPLAY (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
813 Window window = FRAME_X_WINDOW (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
814 int x, y, wd, h, dy;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
815 unsigned char *bits;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
816 Pixmap pixmap;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
817 GC gc = f->output_data.x->normal_gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
818 struct face *face;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
819 int depth = DefaultDepthOfScreen (FRAME_X_SCREEN (f));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
820
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
821 /* Must clip because of partially visible lines. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
822 x_clip_to_row (w, row, gc, 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
823
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
824 switch (which)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
825 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
826 case LEFT_TRUNCATION_BITMAP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
827 wd = left_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
828 h = left_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
829 bits = left_bits;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
830 x = (WINDOW_TO_FRAME_PIXEL_X (w, 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
831 - wd
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
832 - (FRAME_X_LEFT_FLAGS_AREA_WIDTH (f) - wd) / 2);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
833 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
834
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
835 case OVERLAY_ARROW_BITMAP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
836 wd = left_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
837 h = left_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
838 bits = ov_bits;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
839 x = (WINDOW_TO_FRAME_PIXEL_X (w, 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
840 - wd
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
841 - (FRAME_X_LEFT_FLAGS_AREA_WIDTH (f) - wd) / 2);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
842 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
843
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
844 case RIGHT_TRUNCATION_BITMAP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
845 wd = right_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
846 h = right_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
847 bits = right_bits;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
848 x = window_box_right (w, -1);
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
849 x += (FRAME_X_RIGHT_FLAGS_AREA_WIDTH (f) - wd) / 2;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
850 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
851
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
852 case CONTINUED_LINE_BITMAP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
853 wd = right_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
854 h = right_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
855 bits = continued_bits;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
856 x = window_box_right (w, -1);
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
857 x += (FRAME_X_RIGHT_FLAGS_AREA_WIDTH (f) - wd) / 2;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
858 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
859
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
860 case CONTINUATION_LINE_BITMAP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
861 wd = continuation_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
862 h = continuation_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
863 bits = continuation_bits;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
864 x = (WINDOW_TO_FRAME_PIXEL_X (w, 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
865 - wd
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
866 - (FRAME_X_LEFT_FLAGS_AREA_WIDTH (f) - wd) / 2);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
867 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
868
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
869 case ZV_LINE_BITMAP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
870 wd = zv_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
871 h = zv_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
872 bits = zv_bits;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
873 x = (WINDOW_TO_FRAME_PIXEL_X (w, 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
874 - wd
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
875 - (FRAME_X_LEFT_FLAGS_AREA_WIDTH (f) - wd) / 2);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
876 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
877
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
878 default:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
879 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
880 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
881
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
882 /* Convert to frame coordinates. Set dy to the offset in the row to
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
883 start drawing the bitmap. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
884 y = WINDOW_TO_FRAME_PIXEL_Y (w, row->y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
885 dy = (row->height - h) / 2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
886
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
887 /* Draw the bitmap. I believe these small pixmaps can be cached
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
888 by the server. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
889 face = FACE_FROM_ID (f, BITMAP_AREA_FACE_ID);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
890 pixmap = XCreatePixmapFromBitmapData (display, window, bits, wd, h,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
891 face->foreground,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
892 face->background, depth);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
893 XCopyArea (display, pixmap, window, gc, 0, 0, wd, h, x, y + dy);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
894 XFreePixmap (display, pixmap);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
895 XSetClipMask (display, gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
896 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
897
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
898
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
899 /* Draw flags bitmaps for glyph row ROW on window W. Call this
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
900 function with input blocked. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
901
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
902 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
903 x_draw_row_bitmaps (w, row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
904 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
905 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
906 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
907 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
908 enum bitmap_type bitmap;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
909 struct face *face;
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
910 int header_line_height = -1;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
911
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
912 xassert (interrupt_input_blocked);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
913
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
914 /* If row is completely invisible, because of vscrolling, we
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
915 don't have to draw anything. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
916 if (row->visible_height <= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
917 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
918
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
919 face = FACE_FROM_ID (f, BITMAP_AREA_FACE_ID);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
920 PREPARE_FACE_FOR_DISPLAY (f, face);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
921
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
922 /* Decide which bitmap to draw at the left side. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
923 if (row->overlay_arrow_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
924 bitmap = OVERLAY_ARROW_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
925 else if (row->truncated_on_left_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
926 bitmap = LEFT_TRUNCATION_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
927 else if (MATRIX_ROW_CONTINUATION_LINE_P (row))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
928 bitmap = CONTINUATION_LINE_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
929 else if (row->indicate_empty_line_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
930 bitmap = ZV_LINE_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
931 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
932 bitmap = NO_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
933
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
934 /* Clear flags area if no bitmap to draw or if bitmap doesn't fill
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
935 the flags area. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
936 if (bitmap == NO_BITMAP
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
937 || FRAME_FLAGS_BITMAP_WIDTH (f) < FRAME_X_LEFT_FLAGS_AREA_WIDTH (f)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
938 || row->height > FRAME_FLAGS_BITMAP_HEIGHT (f))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
939 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
940 /* If W has a vertical border to its left, don't draw over it. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
941 int border = ((XFASTINT (w->left) > 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
942 && !FRAME_HAS_VERTICAL_SCROLL_BARS (f))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
943 ? 1 : 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
944 int left = window_box_left (w, -1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
945
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
946 if (header_line_height < 0)
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
947 header_line_height = WINDOW_DISPLAY_HEADER_LINE_HEIGHT (w);
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
948
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
949 /* In case the same realized face is used for bitmap areas and
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
950 for something displayed in the text (e.g. face `region' on
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
951 mono-displays, the fill style may have been changed to
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
952 FillSolid in x_draw_glyph_string_background. */
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
953 if (face->stipple)
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
954 XSetFillStyle (FRAME_X_DISPLAY (f), face->gc, FillOpaqueStippled);
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
955 else
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
956 XSetForeground (FRAME_X_DISPLAY (f), face->gc, face->background);
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
957
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
958 XFillRectangle (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
959 face->gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
960 (left
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
961 - FRAME_X_LEFT_FLAGS_AREA_WIDTH (f)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
962 + border),
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
963 WINDOW_TO_FRAME_PIXEL_Y (w, max (header_line_height,
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
964 row->y)),
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
965 FRAME_X_LEFT_FLAGS_AREA_WIDTH (f) - border,
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
966 row->visible_height);
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
967 if (!face->stipple)
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
968 XSetForeground (FRAME_X_DISPLAY (f), face->gc, face->foreground);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
969 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
970
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
971 /* Draw the left bitmap. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
972 if (bitmap != NO_BITMAP)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
973 x_draw_bitmap (w, row, bitmap);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
974
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
975 /* Decide which bitmap to draw at the right side. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
976 if (row->truncated_on_right_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
977 bitmap = RIGHT_TRUNCATION_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
978 else if (row->continued_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
979 bitmap = CONTINUED_LINE_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
980 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
981 bitmap = NO_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
982
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
983 /* Clear flags area if no bitmap to draw of if bitmap doesn't fill
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
984 the flags area. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
985 if (bitmap == NO_BITMAP
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
986 || FRAME_FLAGS_BITMAP_WIDTH (f) < FRAME_X_RIGHT_FLAGS_AREA_WIDTH (f)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
987 || row->height > FRAME_FLAGS_BITMAP_HEIGHT (f))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
988 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
989 int right = window_box_right (w, -1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
990
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
991 if (header_line_height < 0)
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
992 header_line_height = WINDOW_DISPLAY_HEADER_LINE_HEIGHT (w);
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
993
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
994 /* In case the same realized face is used for bitmap areas and
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
995 for something displayed in the text (e.g. face `region' on
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
996 mono-displays, the fill style may have been changed to
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
997 FillSolid in x_draw_glyph_string_background. */
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
998 if (face->stipple)
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
999 XSetFillStyle (FRAME_X_DISPLAY (f), face->gc, FillOpaqueStippled);
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
1000 else
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
1001 XSetForeground (FRAME_X_DISPLAY (f), face->gc, face->background);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1002 XFillRectangle (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1003 face->gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1004 right,
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
1005 WINDOW_TO_FRAME_PIXEL_Y (w, max (header_line_height,
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1006 row->y)),
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
1007 FRAME_X_RIGHT_FLAGS_AREA_WIDTH (f),
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1008 row->visible_height);
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
1009 if (!face->stipple)
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
1010 XSetForeground (FRAME_X_DISPLAY (f), face->gc, face->foreground);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1011 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1012
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1013 /* Draw the right bitmap. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1014 if (bitmap != NO_BITMAP)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1015 x_draw_bitmap (w, row, bitmap);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1016 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1017
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1018
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1019 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1020 Line Highlighting
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1021 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1022
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1023 /* External interface to control of standout mode. Not used for X
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1024 frames. Aborts when called. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1025
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1026 static void
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1027 XTreassert_line_highlight (new, vpos)
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1028 int new, vpos;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1029 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1030 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1031 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1032
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1033
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1034 /* Call this when about to modify line at position VPOS and change
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1035 whether it is highlighted. Not used for X frames. Aborts when
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1036 called. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1037
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1038 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1039 x_change_line_highlight (new_highlight, vpos, y, first_unused_hpos)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1040 int new_highlight, vpos, y, first_unused_hpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1041 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1042 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1043 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1044
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1045
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1046 /* This is called when starting Emacs and when restarting after
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1047 suspend. When starting Emacs, no X window is mapped. And nothing
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1048 must be done to Emacs's own window if it is suspended (though that
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1049 rarely happens). */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1050
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
1051 static void
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1052 XTset_terminal_modes ()
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1053 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1054 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1055
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1056 /* This is called when exiting or suspending Emacs. Exiting will make
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1057 the X-windows go away, and suspending requires no action. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1058
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
1059 static void
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1060 XTreset_terminal_modes ()
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1061 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1062 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1063
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1064
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1065
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1066 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1067 Output Cursor
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1068 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1069
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1070 /* Set the global variable output_cursor to CURSOR. All cursor
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1071 positions are relative to updated_window. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1072
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1073 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1074 set_output_cursor (cursor)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1075 struct cursor_pos *cursor;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1076 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1077 output_cursor.hpos = cursor->hpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1078 output_cursor.vpos = cursor->vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1079 output_cursor.x = cursor->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1080 output_cursor.y = cursor->y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1081 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1082
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1083
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1084 /* Set a nominal cursor position.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1085
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1086 HPOS and VPOS are column/row positions in a window glyph matrix. X
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1087 and Y are window text area relative pixel positions.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1088
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1089 If this is done during an update, updated_window will contain the
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1090 window that is being updated and the position is the future output
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1091 cursor position for that window. If updated_window is null, use
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1092 selected_window and display the cursor at the given position. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1093
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1094 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1095 XTcursor_to (vpos, hpos, y, x)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1096 int vpos, hpos, y, x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1097 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1098 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1099
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1100 /* If updated_window is not set, work on selected_window. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1101 if (updated_window)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1102 w = updated_window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1103 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1104 w = XWINDOW (selected_window);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1105
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1106 /* Set the output cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1107 output_cursor.hpos = hpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1108 output_cursor.vpos = vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1109 output_cursor.x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1110 output_cursor.y = y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1111
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1112 /* If not called as part of an update, really display the cursor.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1113 This will also set the cursor position of W. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1114 if (updated_window == NULL)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1115 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1116 BLOCK_INPUT;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1117 x_display_cursor (w, 1, hpos, vpos, x, y);
25682
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
1118 XFlush (FRAME_X_DISPLAY (SELECTED_FRAME ()));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1119 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1120 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1121 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1122
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1123
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1124
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1125 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1126 Display Iterator
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1127 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1128
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1129 /* Function prototypes of this page. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1130
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1131 static struct face *x_get_glyph_face_and_encoding P_ ((struct frame *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1132 struct glyph *,
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1133 XChar2b *,
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1134 int *));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1135 static struct face *x_get_char_face_and_encoding P_ ((struct frame *, int,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1136 int, XChar2b *, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1137 static XCharStruct *x_per_char_metric P_ ((XFontStruct *, XChar2b *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1138 static void x_encode_char P_ ((int, XChar2b *, struct font_info *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1139 static void x_append_glyph P_ ((struct it *));
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1140 static void x_append_composite_glyph P_ ((struct it *));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1141 static void x_append_stretch_glyph P_ ((struct it *it, Lisp_Object,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1142 int, int, double));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1143 static void x_produce_glyphs P_ ((struct it *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1144 static void x_produce_image_glyph P_ ((struct it *it));
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1145
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1146
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1147 /* Return a pointer to per-char metric information in FONT of a
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1148 character pointed by B which is a pointer to an XChar2b. */
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1149
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1150 #define PER_CHAR_METRIC(font, b) \
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1151 ((font)->per_char \
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1152 ? ((font)->per_char + (b)->byte2 - (font)->min_char_or_byte2 \
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1153 + (((font)->min_byte1 || (font)->max_byte1) \
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1154 ? (((b)->byte1 - (font)->min_byte1) \
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1155 * ((font)->max_char_or_byte2 - (font)->min_char_or_byte2 + 1)) \
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1156 : 0)) \
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1157 : &((font)->max_bounds))
27974
d443ad369a18 (PER_CHAR_METRIC): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27967
diff changeset
1158
d443ad369a18 (PER_CHAR_METRIC): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27967
diff changeset
1159
d443ad369a18 (PER_CHAR_METRIC): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27967
diff changeset
1160 /* 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
1161 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
1162
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1163 static INLINE XCharStruct *
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1164 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
1165 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1166 XChar2b *char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1167 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1168 /* The result metric information. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1169 XCharStruct *pcm = 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 xassert (font && char2b);
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 if (font->per_char != NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1174 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1175 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
1176 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1177 /* 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
1178 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
1179 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
1180 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
1181 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
1182 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
1183 if (char2b->byte1 == 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1184 && char2b->byte2 >= font->min_char_or_byte2
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1185 && char2b->byte2 <= font->max_char_or_byte2)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1186 pcm = font->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
1187 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1188 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1189 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1190 /* 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
1191 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
1192 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
1193 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
1194
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1195 byte1 = N/D + min_byte1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1196 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
1197
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1198 where:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1199
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1200 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
1201 / = integer division
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1202 \ = integer modulus */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1203 if (char2b->byte1 >= font->min_byte1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1204 && char2b->byte1 <= font->max_byte1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1205 && char2b->byte2 >= font->min_char_or_byte2
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1206 && 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
1207 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1208 pcm = (font->per_char
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1209 + ((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
1210 * (char2b->byte1 - font->min_byte1))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1211 + (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
1212 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1213 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1214 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1215 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1216 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1217 /* 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
1218 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
1219 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
1220 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
1221 && 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
1222 pcm = &font->max_bounds;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1223 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1224
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1225 return ((pcm == NULL
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1226 || (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
1227 ? NULL : pcm);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1228 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1229
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1230
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1231 /* 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
1232 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
1233
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1234 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1235 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
1236 int c;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1237 XChar2b *char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1238 struct font_info *font_info;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1239 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1240 int charset = CHAR_CHARSET (c);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1241 XFontStruct *font = font_info->font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1242
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1243 /* 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
1244 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
1245 fixed encoding. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1246 if (font_info->font_encoder)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1247 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1248 /* It's a program. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1249 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
1250
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1251 if (CHARSET_DIMENSION (charset) == 1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1252 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1253 ccl->reg[0] = charset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1254 ccl->reg[1] = char2b->byte2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1255 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1256 else
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 ccl->reg[0] = charset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1259 ccl->reg[1] = char2b->byte1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1260 ccl->reg[2] = char2b->byte2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1261 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1262
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1263 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
1264
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1265 /* 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
1266 program. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1267 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
1268 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
1269 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1270 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
1271 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1272 else if (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 /* 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
1275 encoding numbers. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1276 int enc = font_info->encoding[charset];
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 == 2)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1279 && CHARSET_DIMENSION (charset) == 2)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1280 char2b->byte1 |= 0x80;
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 if (enc == 1 || enc == 3)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1283 char2b->byte2 |= 0x80;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1284 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1285 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1286
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1287
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1288 /* 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
1289 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
1290 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
1291 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
1292
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1293 static INLINE struct face *
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1294 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
1295 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1296 int c, face_id;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1297 XChar2b *char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1298 int 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 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
1301
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1302 if (!multibyte_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1303 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1304 /* 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
1305 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
1306 char2b->byte1 = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1307 char2b->byte2 = c;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1308 face_id = FACE_FOR_CHAR (f, face, c);
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1309 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
1310 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1311 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
1312 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1313 /* 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
1314 char2b->byte1 = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1315 char2b->byte2 = c;
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 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1318 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1319 int c1, c2, charset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1320
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1321 /* 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
1322 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
1323 SPLIT_CHAR (c, charset, c1, c2);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1324 if (c2 > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1325 char2b->byte1 = c1, char2b->byte2 = c2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1326 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1327 char2b->byte1 = 0, char2b->byte2 = c1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1328
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1329 /* Maybe encode the character in *CHAR2B. */
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1330 if (face->font != NULL)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1331 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1332 struct font_info *font_info
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1333 = 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
1334 if (font_info)
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1335 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
1336 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1337 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1338
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1339 /* 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
1340 xassert (face != NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1341 PREPARE_FACE_FOR_DISPLAY (f, face);
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 return face;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1344 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1345
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 /* 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
1348 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
1349 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
1350
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1351 static INLINE struct face *
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1352 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
1353 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1354 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1355 XChar2b *char2b;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1356 int *two_byte_p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1357 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1358 struct face *face;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1359
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1360 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
1361 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
1362
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1363 if (two_byte_p)
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1364 *two_byte_p = 0;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1365
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1366 if (!glyph->multibyte_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1367 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1368 /* 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
1369 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
1370 char2b->byte1 = 0;
27000
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
1371 char2b->byte2 = glyph->u.ch;
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
1372 }
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
1373 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
1374 && 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
1375 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1376 /* 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
1377 char2b->byte1 = 0;
27000
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
1378 char2b->byte2 = glyph->u.ch;
24991
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 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1381 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1382 int c1, c2, charset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1383
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1384 /* 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
1385 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
1386 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
1387 if (c2 > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1388 char2b->byte1 = c1, char2b->byte2 = c2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1389 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1390 char2b->byte1 = 0, char2b->byte2 = c1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1391
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1392 /* Maybe encode the character in *CHAR2B. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1393 if (charset != CHARSET_ASCII)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1394 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1395 struct font_info *font_info
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1396 = 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
1397 if (font_info)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1398 {
27000
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
1399 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
1400 if (two_byte_p)
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1401 *two_byte_p
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1402 = ((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
1403 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1404 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1405 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1406
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1407 /* 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
1408 xassert (face != NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1409 PREPARE_FACE_FOR_DISPLAY (f, face);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1410 return face;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1411 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1412
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1413
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1414 /* 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
1415 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
1416
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1417 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1418 x_append_glyph (it)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1419 struct it *it;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1420 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1421 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1422 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
1423
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1424 xassert (it->glyph_row);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1425 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
1426
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1427 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
1428 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
1429 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1430 glyph->charpos = CHARPOS (it->position);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1431 glyph->object = it->object;
30042
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1432 glyph->pixel_width = it->pixel_width;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1433 glyph->voffset = it->voffset;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1434 glyph->type = CHAR_GLYPH;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1435 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
1436 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
1437 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
1438 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
1439 || it->phys_descent > it->descent);
30042
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1440 glyph->padding_p = 0;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1441 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
1442 glyph->face_id = it->face_id;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1443 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
1444 ++it->glyph_row->used[area];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1445 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1446 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1447
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1448 /* 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
1449 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
1450
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1451 static INLINE void
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1452 x_append_composite_glyph (it)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1453 struct it *it;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1454 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1455 struct glyph *glyph;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1456 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
1457
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1458 xassert (it->glyph_row);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1459
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1460 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
1461 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
1462 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1463 glyph->charpos = CHARPOS (it->position);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1464 glyph->object = it->object;
30042
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1465 glyph->pixel_width = it->pixel_width;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1466 glyph->voffset = it->voffset;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1467 glyph->type = COMPOSITE_GLYPH;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1468 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
1469 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
1470 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
1471 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
1472 || it->phys_descent > it->descent);
30042
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1473 glyph->padding_p = 0;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1474 glyph->glyph_not_available_p = 0;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1475 glyph->face_id = it->face_id;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1476 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
1477 ++it->glyph_row->used[area];
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1478 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1479 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1480
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1481
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1482 /* 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
1483 IT->voffset. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1484
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1485 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1486 take_vertical_position_into_account (it)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1487 struct it *it;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1488 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1489 if (it->voffset)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1490 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1491 if (it->voffset < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1492 /* 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
1493 in the line. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1494 it->ascent += abs (it->voffset);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1495 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1496 /* 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
1497 in the line. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1498 it->descent += it->voffset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1499 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1500 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1501
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 /* 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
1504 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
1505 an overview of struct display_iterator. */
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 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1508 x_produce_image_glyph (it)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1509 struct it *it;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1510 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1511 struct image *img;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1512 struct face *face;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1513
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1514 xassert (it->what == IT_IMAGE);
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 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
1517 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
1518 xassert (img);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1519
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1520 /* 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
1521 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
1522 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
1523
28785
796eafcfc070 (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 28686
diff changeset
1524 it->ascent = it->phys_ascent = image_ascent (img, face);
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1525 it->descent = it->phys_descent = img->height + 2 * img->margin - it->ascent;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1526 it->pixel_width = img->width + 2 * img->margin;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1527
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1528 it->nglyphs = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1529
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1530 if (face->box != FACE_NO_BOX)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1531 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1532 it->ascent += face->box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1533 it->descent += face->box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1534
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1535 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
1536 it->pixel_width += face->box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1537 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
1538 it->pixel_width += face->box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1539 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1540
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1541 take_vertical_position_into_account (it);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1542
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1543 if (it->glyph_row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1544 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1545 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1546 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
1547
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1548 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
1549 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
1550 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1551 glyph->charpos = CHARPOS (it->position);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1552 glyph->object = it->object;
30042
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1553 glyph->pixel_width = it->pixel_width;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1554 glyph->voffset = it->voffset;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1555 glyph->type = IMAGE_GLYPH;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1556 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
1557 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
1558 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
1559 glyph->overlaps_vertically_p = 0;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1560 glyph->padding_p = 0;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1561 glyph->glyph_not_available_p = 0;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1562 glyph->face_id = it->face_id;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1563 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
1564 ++it->glyph_row->used[area];
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1570 /* 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
1571 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
1572 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
1573 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
1574
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1575 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1576 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
1577 struct it *it;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1578 Lisp_Object object;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1579 int width, height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1580 double ascent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1581 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1582 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1583 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
1584
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1585 xassert (ascent >= 0 && ascent <= 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1586
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1587 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
1588 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
1589 {
30042
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1590 glyph->charpos = CHARPOS (it->position);
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1591 glyph->object = object;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1592 glyph->pixel_width = width;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1593 glyph->voffset = it->voffset;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1594 glyph->type = STRETCH_GLYPH;
30042
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1595 glyph->multibyte_p = it->multibyte_p;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1596 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
1597 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
1598 glyph->overlaps_vertically_p = 0;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1599 glyph->padding_p = 0;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1600 glyph->glyph_not_available_p = 0;
22270db6dbeb (x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents: 29948
diff changeset
1601 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
1602 glyph->u.stretch.ascent = height * ascent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1603 glyph->u.stretch.height = height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1604 ++it->glyph_row->used[area];
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1609 /* 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
1610 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
1611 `(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
1612 being recognized:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1613
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1614 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
1615 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
1616 point number.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1617
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1618 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
1619 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
1620 `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
1621
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1622 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
1623 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
1624
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1625 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
1626
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1627 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
1628 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
1629
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1630 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
1631 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
1632 the glyph property.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1633
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1634 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
1635
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1636 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
1637 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
1638 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
1639
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1640 #define NUMVAL(X) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1641 ((INTEGERP (X) || FLOATP (X)) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1642 ? XFLOATINT (X) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1643 : - 1)
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1646 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1647 x_produce_stretch_glyph (it)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1648 struct it *it;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1649 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1650 /* (space :width WIDTH :height HEIGHT. */
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1651 #if GLYPH_DEBUG
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1652 extern Lisp_Object Qspace;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1653 #endif
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1654 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
1655 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
1656 extern Lisp_Object QCalign_to;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1657 Lisp_Object prop, plist;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1658 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
1659 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
1660 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
1661
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1662 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
1663
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1664 /* List should start with `space'. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1665 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
1666 plist = XCDR (it->object);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1667
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1668 /* Compute the width of the stretch. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1669 if (prop = Fplist_get (plist, QCwidth),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1670 NUMVAL (prop) > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1671 /* 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
1672 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
1673 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
1674 NUMVAL (prop) > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1675 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1676 /* 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
1677 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
1678 property. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1679 struct it it2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1680 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
1681
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1682 it2 = *it;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1683 if (it->multibyte_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1684 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1685 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
1686 - IT_BYTEPOS (*it));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1687 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
1688 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1689 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1690 it2.c = *p, it2.len = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1691
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1692 it2.glyph_row = NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1693 it2.what = IT_CHARACTER;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1694 x_produce_glyphs (&it2);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1695 width = NUMVAL (prop) * it2.pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1696 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1697 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
1698 NUMVAL (prop) > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1699 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
1700 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1701 /* 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
1702 width = CANON_X_UNIT (it->f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1703
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1704 /* Compute height. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1705 if (prop = Fplist_get (plist, QCheight),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1706 NUMVAL (prop) > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1707 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
1708 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
1709 NUMVAL (prop) > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1710 height = FONT_HEIGHT (font) * NUMVAL (prop);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1711 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1712 height = FONT_HEIGHT (font);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1713
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1714 /* 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
1715 `: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
1716 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
1717 if (prop = Fplist_get (plist, QCascent),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1718 NUMVAL (prop) > 0 && NUMVAL (prop) <= 100)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1719 ascent = NUMVAL (prop) / 100.0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1720 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1721 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
1722
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1723 if (width <= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1724 width = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1725 if (height <= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1726 height = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1727
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1728 if (it->glyph_row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1729 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1730 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
1731 if (!STRINGP (object))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1732 object = it->w->buffer;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1733 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
1734 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1735
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1736 it->pixel_width = width;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1737 it->ascent = it->phys_ascent = height * ascent;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1738 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
1739 it->nglyphs = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1740
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1741 if (face->box != FACE_NO_BOX)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1742 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1743 it->ascent += face->box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1744 it->descent += face->box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1745
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1746 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
1747 it->pixel_width += face->box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1748 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
1749 it->pixel_width += face->box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1750 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1751
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1752 take_vertical_position_into_account (it);
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
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1755 /* 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
1756 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
1757 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
1758
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1759 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
1760
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1761 -------------------------+-----------+-
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 | | | | F_ASCENT F_HEIGHT
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1765 | | | ASCENT | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1766 HEIGHT | | | | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1767 | | |-|-+------+-----------|------- baseline
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1768 | | | | BOFF | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1769 | |---------|-+-+ | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1770 | | | DESCENT | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1771 -+-+---------+-+ F_DESCENT |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1772 -------------------------+-----------+-
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1773
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1774 -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
1775 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
1776 DESCENT = FONT->descent
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1777 HEIGHT = FONT_HEIGHT (FONT)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1778 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
1779 - 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
1780 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
1781 */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1782
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1783 #define VCENTER_BASELINE_OFFSET(FONT, F) \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1784 ((FONT)->descent \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1785 + (FRAME_LINE_HEIGHT ((F)) - FONT_HEIGHT ((FONT))) / 2 \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1786 - ((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
1787
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1788 /* 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
1789 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
1790 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
1791
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1792 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1793 x_produce_glyphs (it)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1794 struct it *it;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1795 {
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1796 it->glyph_not_available_p = 0;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1797
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1798 if (it->what == IT_CHARACTER)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1799 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1800 XChar2b char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1801 XFontStruct *font;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1802 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
1803 XCharStruct *pcm;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1804 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
1805 struct font_info *font_info;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1806 int boff; /* baseline offset */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1807
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1808 /* 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
1809 other way. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1810 it->char_to_display = it->c;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1811 if (!ASCII_BYTE_P (it->c))
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1812 {
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1813 if (unibyte_display_via_language_environment
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1814 && SINGLE_BYTE_CHAR_P (it->c)
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1815 && (it->c >= 0240
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1816 || !NILP (Vnonascii_translation_table)))
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1817 {
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1818 it->char_to_display = unibyte_char_to_multibyte (it->c);
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1819 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
1820 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
1821 }
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1822 else if (!SINGLE_BYTE_CHAR_P (it->c)
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1823 && !it->multibyte_p)
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1824 {
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1825 it->char_to_display = multibyte_char_to_unibyte (it->c, Qnil);
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1826 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
1827 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
1828 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1829 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1830
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1831 /* 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
1832 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
1833 it->face_id, &char2b,
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1834 it->multibyte_p);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1835 font = face->font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1836
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1837 /* 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
1838 font_not_found_p = font == NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1839 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
1840 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1841 font = FRAME_FONT (it->f);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1842 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
1843 font_info = NULL;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1844 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1845 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1846 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1847 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
1848 boff = font_info->baseline_offset;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1849 if (font_info->vertical_centering)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1850 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
1851 }
24991
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 if (it->char_to_display >= ' '
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1854 && (!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
1855 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1856 /* Either unibyte or ASCII. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1857 int stretched_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1858
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1859 it->nglyphs = 1;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1860
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1861 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
1862 it->ascent = font->ascent + boff;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1863 it->descent = font->descent - boff;
28443
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1864
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1865 if (pcm)
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1866 {
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1867 it->phys_ascent = pcm->ascent + boff;
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1868 it->phys_descent = pcm->descent - boff;
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1869 it->pixel_width = pcm->width;
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1870 }
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1871 else
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1872 {
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1873 it->glyph_not_available_p = 1;
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1874 it->phys_ascent = font->ascent + boff;
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1875 it->phys_descent = font->descent - boff;
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1876 it->pixel_width = FONT_WIDTH (font);
17fb2089c222 (x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1877 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1878
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1879 /* If 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
1880 `space-width' property, change its width. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1881 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
1882 if (stretched_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1883 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
1884
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1885 /* 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
1886 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
1887 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
1888 if (face->box != FACE_NO_BOX)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1889 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1890 int thick = face->box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1891
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1892 it->ascent += thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1893 it->descent += thick;
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 (it->start_of_box_run_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1896 it->pixel_width += thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1897 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
1898 it->pixel_width += thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1899 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1900
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1901 /* 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
1902 (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
1903 if (face->overline_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1904 it->ascent += 2;
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 take_vertical_position_into_account (it);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1907
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1908 /* If 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
1909 if (it->glyph_row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1910 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1911 if (stretched_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1912 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1913 /* 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
1914 into a stretch glyph. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1915 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
1916 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
1917 it->ascent + it->descent, ascent);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1918 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1919 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1920 x_append_glyph (it);
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 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
1923 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
1924 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
1925 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
1926 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
1927 }
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 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
1930 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1931 /* 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
1932 it->pixel_width = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1933 it->nglyphs = 0;
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1934 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
1935 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
1936
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1937 if (face->box != FACE_NO_BOX)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1938 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1939 int thick = face->box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1940 it->ascent += thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1941 it->descent += thick;
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 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1944 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
1945 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1946 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
1947 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
1948 int next_tab_x = ((1 + x + tab_width - 1) / tab_width) * tab_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1949
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1950 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
1951 it->nglyphs = 1;
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1952 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
1953 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
1954
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1955 if (it->glyph_row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1956 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1957 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
1958 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
1959 it->ascent + it->descent, ascent);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1960 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1961 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1962 else
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 /* 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
1965 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
1966 width of the font. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1967
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1968 /* 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
1969 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
1970 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
1971 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
1972 did. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1973 pcm = x_per_char_metric (font, &char2b);
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1974 if (font_not_found_p || !pcm)
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1975 {
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1976 int charset = CHAR_CHARSET (it->char_to_display);
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1977
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1978 it->glyph_not_available_p = 1;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1979 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
1980 * CHARSET_WIDTH (charset));
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1981 it->phys_ascent = font->ascent + boff;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1982 it->phys_descent = font->descent - boff;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1983 }
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1984 else
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1985 {
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1986 it->pixel_width = pcm->width;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1987 it->phys_ascent = pcm->ascent + boff;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1988 it->phys_descent = pcm->descent - boff;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1989 if (it->glyph_row
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1990 && (pcm->lbearing < 0
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1991 || pcm->rbearing > pcm->width))
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1992 it->glyph_row->contains_overlapping_glyphs_p = 1;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1993 }
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1994 it->nglyphs = 1;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1995 it->ascent = font->ascent + boff;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1996 it->descent = font->descent - boff;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1997 if (face->box != FACE_NO_BOX)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1998 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1999 int thick = face->box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2000 it->ascent += thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2001 it->descent += thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2002
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2003 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
2004 it->pixel_width += thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2005 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
2006 it->pixel_width += thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2007 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2008
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2009 /* 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
2010 (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
2011 if (face->overline_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2012 it->ascent += 2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2013
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2014 take_vertical_position_into_account (it);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2015
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2016 if (it->glyph_row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2017 x_append_glyph (it);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2018 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2019 }
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2020 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
2021 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2022 /* 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
2023 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
2024 XChar2b char2b;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2025 XFontStruct *font;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2026 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
2027 XCharStruct *pcm;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2028 int font_not_found_p;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2029 struct font_info *font_info;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2030 int boff; /* baseline offset */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2031 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
2032
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2033 /* 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
2034 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
2035 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
2036 && 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
2037 && (it->c >= 0240
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2038 || (it->c >= 0200
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2039 && !NILP (Vnonascii_translation_table))))
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2040 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2041 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
2042 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2043
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2044 /* 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
2045 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
2046 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
2047 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
2048 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
2049 font = face->font;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2050
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2051 /* 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
2052 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
2053 if (font_not_found_p)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2054 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2055 font = FRAME_FONT (it->f);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2056 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
2057 font_info = NULL;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2058 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2059 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2060 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2061 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
2062 boff = font_info->baseline_offset;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2063 if (font_info->vertical_centering)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2064 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
2065 }
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 /* 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
2068 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
2069 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
2070 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
2071 it->nglyphs = 1;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2072
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2073 /* 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
2074 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
2075 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
2076 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
2077 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
2078 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
2079 correct the display anyway. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2080 if (cmp->font != (void *) font)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2081 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2082 /* 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
2083 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
2084 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
2085 them respectively. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2086 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
2087 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
2088 /* 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
2089 int leftmost, rightmost, lowest, highest;
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2090 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
2091
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2092 cmp->font = (void *) font;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2093
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2094 /* Initialize the bounding box. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2095 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
2096 if (pcm)
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2097 {
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2098 width = pcm->width;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2099 ascent = pcm->ascent;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2100 descent = pcm->descent;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2101 }
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2102 else
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2103 {
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2104 width = FONT_WIDTH (font);
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2105 ascent = font->ascent;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2106 descent = font->descent;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2107 }
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2108
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2109 rightmost = width;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2110 lowest = - descent + boff;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2111 highest = ascent + boff;
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2112 leftmost = 0;
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2113
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2114 if (font_info
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2115 && font_info->default_ascent
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2116 && 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
2117 && !NILP (Faref (Vuse_default_ascent,
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2118 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
2119 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
2120
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2121 /* 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
2122 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
2123 the left. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2124 cmp->offsets[0] = 0;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2125 cmp->offsets[1] = boff;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2126
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2127 /* 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
2128 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
2129 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2130 int left, right, btm, top;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2131 int ch = COMPOSITION_GLYPH (cmp, i);
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2132 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
2133
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2134 face = FACE_FROM_ID (it->f, face_id);
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2135 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
2136 it->multibyte_p);
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2137 font = face->font;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2138 if (font == NULL)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2139 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2140 font = FRAME_FONT (it->f);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2141 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
2142 font_info = NULL;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2143 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2144 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2145 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2146 font_info
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2147 = 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
2148 boff = font_info->baseline_offset;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2149 if (font_info->vertical_centering)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2150 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
2151 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2152
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2153 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
2154 if (pcm)
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2155 {
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2156 width = pcm->width;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2157 ascent = pcm->ascent;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2158 descent = pcm->descent;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2159 }
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2160 else
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2161 {
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2162 width = FONT_WIDTH (font);
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2163 ascent = font->ascent;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2164 descent = font->descent;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2165 }
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2166
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2167 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
2168 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2169 /* Relative composition with or without
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2170 alternate chars. */
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2171 left = (leftmost + rightmost - width) / 2;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2172 btm = - descent + boff;
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2173 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
2174 && (! 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
2175 || NILP (Faref (Vignore_relative_composition,
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2176 make_number (ch)))))
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
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2179 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
2180 /* 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
2181 btm = highest + 1;
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2182 else if (ascent <= 0)
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2183 /* One extra pixel between two glyphs. */
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2184 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
2185 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2186 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2187 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2188 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2189 /* 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
2190 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
2191 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
2192 specified by numbers as below:
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2193
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2194 0---1---2 -- ascent
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2195 | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2196 | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2197 | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2198 9--10--11 -- center
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2199 | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2200 ---3---4---5--- baseline
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2201 | |
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2202 6---7---8 -- descent
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2203 */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2204 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
2205 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
2206
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2207 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
2208 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
2209 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
2210
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2211 left = (leftmost
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2212 + grefx * (rightmost - leftmost) / 2
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2213 - nrefx * width / 2);
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2214 btm = ((grefy == 0 ? highest
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2215 : grefy == 1 ? 0
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2216 : grefy == 2 ? lowest
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2217 : (highest + lowest) / 2)
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2218 - (nrefy == 0 ? ascent + descent
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2219 : nrefy == 1 ? descent - boff
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2220 : nrefy == 2 ? 0
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2221 : (ascent + descent) / 2));
26879
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
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2224 cmp->offsets[i * 2] = left;
28793
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2225 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
2226
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2227 /* 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
2228 right = left + width;
e56af637f7a2 (x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents: 28785
diff changeset
2229 top = btm + descent + ascent;
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2230 if (left < leftmost)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2231 leftmost = left;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2232 if (right > rightmost)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2233 rightmost = right;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2234 if (top > highest)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2235 highest = top;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2236 if (btm < lowest)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2237 lowest = btm;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2238 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2239
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2240 /* 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
2241 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
2242 non-negative. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2243 if (leftmost < 0)
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 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
2246 cmp->offsets[i * 2] -= leftmost;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2247 rightmost -= leftmost;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2248 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2249
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2250 cmp->pixel_width = rightmost;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2251 cmp->ascent = highest;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2252 cmp->descent = - lowest;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2253 if (cmp->ascent < font_ascent)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2254 cmp->ascent = font_ascent;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2255 if (cmp->descent < font_descent)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2256 cmp->descent = font_descent;
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
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2259 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
2260 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
2261 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
2262
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2263 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
2264 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2265 int thick = face->box_line_width;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2266 it->ascent += thick;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2267 it->descent += thick;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2268
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2269 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
2270 it->pixel_width += thick;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2271 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
2272 it->pixel_width += thick;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2273 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2274
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2275 /* 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
2276 (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
2277 if (face->overline_p)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2278 it->ascent += 2;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2279
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2280 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
2281
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2282 if (it->glyph_row)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2283 x_append_composite_glyph (it);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2284 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2285 else if (it->what == IT_IMAGE)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2286 x_produce_image_glyph (it);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2287 else if (it->what == IT_STRETCH)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2288 x_produce_stretch_glyph (it);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2289
29458
679888a29324 (x_produce_glyphs): Don't xassert `it->descent > 0';
Gerd Moellmann <gerd@gnu.org>
parents: 29435
diff changeset
2290 /* 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
2291 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
2292 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
2293 if (it->area == TEXT_AREA)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2294 it->current_x += it->pixel_width;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2295
28686
b02f0d91b5aa (x_produce_glyphs): Remove reference to struct it's
Gerd Moellmann <gerd@gnu.org>
parents: 28629
diff changeset
2296 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
2297
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2298 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
2299 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
2300 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
2301 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
2302 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2303
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2304
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2305 /* 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
2306 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
2307
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2308 int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2309 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
2310 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2311 enum face_id face_id;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2312 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2313 int height = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2314
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2315 /* 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
2316 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
2317 if (FRAME_FACE_CACHE (f))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2318 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2319 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
2320 if (face)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2321 height = FONT_HEIGHT (face->font) + 2 * face->box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2322 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2323
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2324 return height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2325 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2326
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2327
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2328 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2329 Glyph display
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2330 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2331
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2332 /* 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
2333
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2334 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
2335 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
2336 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
2337 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
2338
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2339 struct glyph_string
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2340 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2341 /* X-origin of the string. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2342 int x;
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 /* 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
2345 int y, ybase;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2346
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2347 /* 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
2348 int width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2349
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2350 /* 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
2351 int background_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2352
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2353 /* 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
2354 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
2355 font the string is drawn in. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2356 int height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2357
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2358 /* 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
2359 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
2360 -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
2361 int left_overhang;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2362
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2363 /* 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
2364 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
2365 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
2366 int right_overhang;
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 /* 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
2369 struct frame *f;
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 /* 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
2372 struct window *w;
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 /* X display and window for convenience. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2375 Display *display;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2376 Window window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2377
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2378 /* 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
2379 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
2380 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2381
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2382 /* The area within row. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2383 enum glyph_row_area area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2384
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2385 /* 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
2386 XChar2b *char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2387 int nchars;
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 /* 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
2390 enum draw_glyphs_face hl;
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 /* 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
2393 struct face *face;
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 /* 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
2396 XFontStruct *font;
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 /* Font info for this string. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2399 struct font_info *font_info;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2400
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2401 /* 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
2402 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
2403 struct composition *cmp;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2404
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2405 /* 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
2406 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
2407 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
2408 int gidx;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2409
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2410 /* 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
2411 of the window's drawing area. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2412 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
2413
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2414 /* 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
2415 unsigned background_filled_p : 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2416
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2417 /* 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
2418 unsigned two_byte_p : 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2419
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2420 /* 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
2421 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
2422 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
2423 unsigned font_not_found_p : 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2424
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2425 /* 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
2426 stipple pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2427 unsigned stippled_p : 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2428
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2429 /* 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
2430 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
2431 string appears in as clip rect. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2432 unsigned for_overlaps_p : 1;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2433
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2434 /* 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
2435 GC gc;
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 /* 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
2438 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
2439 font_not_found_p is 1. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2440 struct glyph *first_glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2441
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2442 /* Image, if any. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2443 struct image *img;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2444
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2445 struct glyph_string *next, *prev;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2446 };
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2447
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2448
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
2449 #if 0
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2450
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2451 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2452 x_dump_glyph_string (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2453 struct glyph_string *s;
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 fprintf (stderr, "glyph string\n");
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2456 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
2457 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
2458 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
2459 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
2460 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
2461 s->left_overhang, s->right_overhang);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2462 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
2463 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
2464 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
2465 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
2466 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
2467 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2468
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2469 #endif /* GLYPH_DEBUG */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2470
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2471
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2472
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2473 static 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
2474 struct glyph_string **,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2475 struct glyph_string *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2476 struct glyph_string *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2477 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
2478 struct glyph_string **,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2479 struct glyph_string *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2480 struct glyph_string *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2481 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
2482 struct glyph_string **,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2483 struct glyph_string *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2484 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
2485 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
2486 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
2487 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
2488 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
2489 int));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2490 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
2491 XChar2b *, struct window *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2492 struct glyph_row *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2493 enum glyph_row_area, int,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2494 enum draw_glyphs_face));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2495 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
2496 enum glyph_row_area, int, int,
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2497 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
2498 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
2499 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
2500 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
2501 int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2502 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
2503 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
2504 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
2505 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
2506 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
2507 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
2508 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
2509 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
2510 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
2511 int *, int *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2512 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
2513 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
2514 unsigned long *, double, int));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2515 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
2516 double, int, unsigned long));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2517 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
2518 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
2519 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
2520 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
2521 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
2522 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
2523 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
2524 int, int, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2525 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
2526 int, int, int, int, XRectangle *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2527 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
2528 int, int, int, XRectangle *));
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2529 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
2530 enum glyph_row_area));
30137
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
2531 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
2532 struct glyph_row *,
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
2533 enum glyph_row_area, int, int));
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2534
29619
d171b4754825 (x_check_font) [GLYPH_DEBUG]: Add prototype.
Gerd Moellmann <gerd@gnu.org>
parents: 29600
diff changeset
2535 #if GLYPH_DEBUG
d171b4754825 (x_check_font) [GLYPH_DEBUG]: Add prototype.
Gerd Moellmann <gerd@gnu.org>
parents: 29600
diff changeset
2536 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
2537 #endif
d171b4754825 (x_check_font) [GLYPH_DEBUG]: Add prototype.
Gerd Moellmann <gerd@gnu.org>
parents: 29600
diff changeset
2538
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2539
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2540 /* 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
2541 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
2542
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2543 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2544 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
2545 struct glyph_string **head, **tail;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2546 struct glyph_string *h, *t;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2547 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2548 if (h)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2549 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2550 if (*head)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2551 (*tail)->next = h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2552 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2553 *head = h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2554 h->prev = *tail;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2555 *tail = t;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2556 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2557 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2558
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2559
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2560 /* 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
2561 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
2562 result. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2563
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2564 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2565 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
2566 struct glyph_string **head, **tail;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2567 struct glyph_string *h, *t;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2568 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2569 if (h)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2570 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2571 if (*head)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2572 (*head)->prev = t;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2573 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2574 *tail = t;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2575 t->next = *head;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2576 *head = h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2577 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2578 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2579
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2580
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2581 /* 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
2582 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
2583
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2584 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2585 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
2586 struct glyph_string **head, **tail;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2587 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2588 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2589 s->next = s->prev = NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2590 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
2591 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2592
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2593
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2594 /* 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
2595 face. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2596
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2597 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2598 x_set_cursor_gc (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2599 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2600 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2601 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
2602 && 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
2603 && 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
2604 && !s->cmp)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2605 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
2606 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2607 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2608 /* 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
2609 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2610 unsigned long mask;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2611
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2612 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
2613 xgcv.foreground = s->face->background;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2614
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2615 /* If 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
2616 if (xgcv.foreground == xgcv.background)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2617 xgcv.foreground = s->face->foreground;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2618 if (xgcv.foreground == xgcv.background)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2619 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
2620 if (xgcv.foreground == xgcv.background)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2621 xgcv.foreground = s->face->foreground;
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 /* 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
2624 if (xgcv.background == s->face->background
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2625 && xgcv.foreground == s->face->foreground)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2626 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2627 xgcv.background = s->face->foreground;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2628 xgcv.foreground = s->face->background;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2629 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2630
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2631 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
2632 xgcv.font = s->font->fid;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2633 xgcv.graphics_exposures = False;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2634 mask = GCForeground | GCBackground | GCFont | GCGraphicsExposures;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2635
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2636 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
2637 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
2638 mask, &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2639 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2640 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
2641 = 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
2642
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2643 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
2644 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2647
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2648 /* 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
2649
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2650 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2651 x_set_mouse_face_gc (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2652 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2653 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2654 int face_id;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2655 struct face *face;
24991
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 /* What face has to be used for the mouse face? */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2658 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
2659 face = FACE_FROM_ID (s->f, face_id);
29393
3ad9354ade23 (x_set_mouse_face_gc): If first glyph isn't a character
Gerd Moellmann <gerd@gnu.org>
parents: 28793
diff changeset
2660 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
2661 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
2662 else
3ad9354ade23 (x_set_mouse_face_gc): If first glyph isn't a character
Gerd Moellmann <gerd@gnu.org>
parents: 28793
diff changeset
2663 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
2664 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
2665 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
2666
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2667 /* 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
2668 if (s->font == s->face->font)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2669 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2670 else
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 /* 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
2673 but font FONT. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2674 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2675 unsigned long mask;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2676
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2677 xgcv.background = s->face->background;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2678 xgcv.foreground = s->face->foreground;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2679 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
2680 xgcv.font = s->font->fid;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2681 xgcv.graphics_exposures = False;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2682 mask = GCForeground | GCBackground | GCFont | GCGraphicsExposures;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2683
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2684 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
2685 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
2686 mask, &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2687 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2688 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 = 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
2690
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2691 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
2692 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2693
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2694 xassert (s->gc != 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2695 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2696
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2697
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2698 /* 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
2699 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
2700 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
2701
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2702 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2703 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
2704 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2705 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2706 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2707 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2708
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2709
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2710 /* 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
2711 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
2712 pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2713
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2714 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2715 x_set_glyph_string_gc (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2716 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2717 {
30137
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
2718 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
2719
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2720 if (s->hl == DRAW_NORMAL_TEXT)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2721 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2722 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2723 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
2724 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2725 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
2726 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2727 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
2728 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
2729 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2730 else if (s->hl == DRAW_CURSOR)
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 x_set_cursor_gc (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2733 s->stippled_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2734 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2735 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
2736 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2737 x_set_mouse_face_gc (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2738 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
2739 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2740 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
2741 || s->hl == DRAW_IMAGE_SUNKEN)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2742 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2743 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2744 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
2745 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2746 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2747 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2748 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2749 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
2750 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2751
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2752 /* GC must have been set. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2753 xassert (s->gc != 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2754 }
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 /* 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
2758
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2759 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2760 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
2761 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2762 XRectangle *r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2763 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2764 if (s->row->full_width_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2765 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2766 /* Draw 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
2767 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
2768
3a09aae52441 (x_get_glyph_string_clip_rect): Take internal border
Gerd Moellmann <gerd@gnu.org>
parents: 25068
diff changeset
2769 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
2770 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
2771
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2772 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
2773 {
25079
3a09aae52441 (x_get_glyph_string_clip_rect): Take internal border
Gerd Moellmann <gerd@gnu.org>
parents: 25068
diff changeset
2774 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
2775 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
2776 r->x -= width;
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
25083
d3b7d7d2bca8 (x_setup_relief_color): Don't try smart color allocation
Gerd Moellmann <gerd@gnu.org>
parents: 25079
diff changeset
2779 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
2780
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2781 /* 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
2782 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
2783 if (s->w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2784 r->height = s->row->visible_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2785 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2786 r->height = s->height;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2789 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2790 /* 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
2791 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
2792 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
2793 r->height = s->row->visible_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2794 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2795
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2796 /* 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
2797 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
2798 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
2799 if (!s->row->full_width_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2800 && MATRIX_ROW_PARTIALLY_VISIBLE_AT_TOP_P (s->w, s->row))
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
2801 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
2802 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2803 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
2804
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
2805 /* 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
2806 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
2807 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
2808 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
2809
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2810 /* 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
2811 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
2812 intentionally draws over other lines. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2813 if (s->for_overlaps_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2814 {
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
2815 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
2816 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
2817 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2818
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2819 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
2820 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2821
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2822
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2823 /* 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
2824 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
2825
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2826 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2827 x_set_glyph_string_clipping (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2828 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2829 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2830 XRectangle r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2831 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
2832 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
2833 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2834
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2835
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2836 /* 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
2837 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
2838
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2839 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2840 x_compute_glyph_string_overhangs (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2841 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2842 {
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2843 if (s->cmp == NULL
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2844 && s->first_glyph->type == CHAR_GLYPH)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2845 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2846 XCharStruct cs;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2847 int direction, font_ascent, font_descent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2848 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
2849 &font_ascent, &font_descent, &cs);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2850 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
2851 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
2852 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2853 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2854
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2855
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2856 /* 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
2857 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
2858 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
2859
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2860 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2861 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
2862 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2863 int x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2864 int backward_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2865 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2866 if (backward_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2867 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2868 while (s)
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 x_compute_glyph_string_overhangs (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2871 x -= s->width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2872 s->x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2873 s = s->prev;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2874 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2875 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2876 else
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 while (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2879 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2880 x_compute_glyph_string_overhangs (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2881 s->x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2882 x += s->width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2883 s = s->next;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2884 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2885 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2888
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2889 /* 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
2890 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
2891 assumed to be zero. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2892
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2893 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2894 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
2895 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2896 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2897 int *left, *right;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2898 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2899 *left = *right = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2900
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2901 if (glyph->type == CHAR_GLYPH)
24991
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 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2904 struct face *face;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2905 struct font_info *font_info;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2906 XChar2b char2b;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2907 XCharStruct *pcm;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2908
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2909 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
2910 font = face->font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2911 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
2912 if (font
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2913 && (pcm = x_per_char_metric (font, &char2b)))
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
2914 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2915 if (pcm->rbearing > pcm->width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2916 *right = pcm->rbearing - pcm->width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2917 if (pcm->lbearing < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2918 *left = -pcm->lbearing;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2919 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2920 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2921 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2922
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2923
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2924 /* 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
2925 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
2926 if no glyphs are overwritten. */
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 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2929 x_left_overwritten (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2930 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2931 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2932 int k;
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 if (s->left_overhang)
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 int x = 0, i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2937 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
2938 int first = s->first_glyph - glyphs;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2939
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2940 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
2941 x -= glyphs[i].pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2942
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2943 k = i + 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2944 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2945 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2946 k = -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2947
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2948 return k;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2949 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2950
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2951
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2952 /* 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
2953 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
2954 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
2955
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2956 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2957 x_left_overwriting (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2958 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2959 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2960 int i, k, x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2961 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
2962 int first = s->first_glyph - glyphs;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2963
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2964 k = -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2965 x = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2966 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
2967 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2968 int left, right;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2969 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
2970 if (x + right > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2971 k = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2972 x -= glyphs[i].pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2973 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2974
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2975 return k;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2976 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2977
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2978
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2979 /* 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
2980 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
2981 no such glyph is found. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2982
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2983 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2984 x_right_overwritten (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2985 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2986 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2987 int k = -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2988
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2989 if (s->right_overhang)
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 int x = 0, i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2992 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
2993 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
2994 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
2995
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2996 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
2997 x += glyphs[i].pixel_width;
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 k = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3000 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3001
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3002 return k;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3005
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3006 /* 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
3007 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
3008 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
3009
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
3010 static int
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3011 x_right_overwriting (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3012 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3013 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3014 int i, k, x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3015 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
3016 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
3017 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
3018
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3019 k = -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3020 x = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3021 for (i = first; i < end; ++i)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3022 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3023 int left, right;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3024 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
3025 if (x - left < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3026 k = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3027 x += glyphs[i].pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3028 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3029
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3030 return k;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3031 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3032
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3033
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3034 /* 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
3035
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3036 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3037 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
3038 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3039 int x, y, w, h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3040 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3041 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3042 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
3043 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
3044 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
3045 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
3046 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3047
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3048
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3049 /* 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
3050 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
3051 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
3052 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
3053 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
3054
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3055 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3056 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
3057 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3058 int force_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3059 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3060 /* 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
3061 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
3062 if (!s->background_filled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3063 {
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3064 if (s->stippled_p)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3065 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3066 /* Fill background with a stipple pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3067 XSetFillStyle (s->display, s->gc, FillOpaqueStippled);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3068 XFillRectangle (s->display, s->window, s->gc, s->x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3069 s->y + s->face->box_line_width,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3070 s->background_width,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3071 s->height - 2 * s->face->box_line_width);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3072 XSetFillStyle (s->display, s->gc, FillSolid);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3073 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3074 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3075 else if (FONT_HEIGHT (s->font) < s->height - 2 * s->face->box_line_width
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3076 || s->font_not_found_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3077 || 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
3078 || force_p)
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 x_clear_glyph_string_rect (s, s->x, s->y + s->face->box_line_width,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3081 s->background_width,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3082 s->height - 2 * s->face->box_line_width);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3083 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3084 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3085 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3086 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3087
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3088
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3089 /* 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
3090
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3091 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3092 x_draw_glyph_string_foreground (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3093 struct glyph_string *s;
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 int i, x;
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 /* 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
3098 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
3099 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
3100 && 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
3101 x = s->x + s->face->box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3102 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3103 x = s->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3104
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3105 /* 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
3106 loaded. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3107 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
3108 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3109 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
3110 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3111 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
3112 XDrawRectangle (s->display, s->window,
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3113 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
3114 s->height - 1);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3115 x += g->pixel_width;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3116 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3117 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3118 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3119 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3120 char *char1b = (char *) s->char2b;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3121 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
3122
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3123 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
3124 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
3125
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3126 /* 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
3127 if (!s->two_byte_p)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3128 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
3129 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
3130
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3131 /* 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
3132 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
3133 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
3134 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
3135 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
3136 if (s->for_overlaps_p
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3137 || (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
3138 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3139 /* 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
3140 if (s->two_byte_p)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3141 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
3142 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
3143 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3144 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
3145 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
3146 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3147 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3148 {
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3149 if (s->two_byte_p)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3150 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
3151 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
3152 else
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3153 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
3154 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
3155 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3156 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3157 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3158
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3159 /* 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
3160
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3161 static void
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3162 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
3163 struct glyph_string *s;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3164 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3165 int i, x;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3166
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3167 /* If 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
3168 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
3169 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
3170 && s->first_glyph->left_box_line_p)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3171 x = s->x + s->face->box_line_width;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3172 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3173 x = s->x;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3174
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3175 /* 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
3176 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
3177 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
3178 this composition. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3179
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3180 /* Draw 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
3181 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
3182 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
3183 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3184 if (s->gidx == 0)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3185 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
3186 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
3187 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3188 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3189 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
3190 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
3191 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
3192 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
3193 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
3194 s->char2b + i, 1);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3195 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3198
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3199 #ifdef USE_X_TOOLKIT
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3200
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3201 static struct frame *x_frame_of_widget P_ ((Widget));
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3202
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3203
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3204 /* 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
3205 cannot be determined. */
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3206
29749
4235764941b5 (x_frame_of_widget): Add `static' to declaration (for pcc).
Dave Love <fx@gnu.org>
parents: 29744
diff changeset
3207 static struct frame *
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3208 x_frame_of_widget (widget)
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3209 Widget widget;
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3210 {
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3211 struct x_display_info *dpyinfo;
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
3212 Lisp_Object tail;
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3213 struct frame *f;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3214
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3215 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
3216
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3217 /* 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
3218 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
3219 (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
3220 x_any_window_to_frame. */
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3221 while (!XtIsTopLevelShell (widget))
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3222 widget = XtParent (widget);
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3223
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3224 /* 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
3225 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
3226 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
3227 if (GC_FRAMEP (XCAR (tail))
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3228 && (f = XFRAME (XCAR (tail)),
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3229 (f->output_data.nothing != 1
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3230 && FRAME_X_DISPLAY_INFO (f) == dpyinfo))
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3231 && f->output_data.x->widget == widget)
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3232 return f;
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3233
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3234 abort ();
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3235 }
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3236
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3237
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3238 /* 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
3239 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
3240 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
3241 if successful. This is called from lwlib. */
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3242
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3243 int
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3244 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
3245 Widget widget;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3246 Colormap cmap;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3247 XColor *color;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3248 {
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3249 struct frame *f = x_frame_of_widget (widget);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3250 return x_alloc_nearest_color (f, cmap, color);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3251 }
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3252
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3253
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3254 #endif /* USE_X_TOOLKIT */
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3255
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3256
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3257 /* Allocate the color COLOR->pixel on SCREEN of DISPLAY, colormap
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3258 CMAP. If an exact match can't be allocated, try the nearest color
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3259 available. Value is non-zero if successful. Set *COLOR to the
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3260 color allocated. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3261
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3262 int
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3263 x_alloc_nearest_color (f, cmap, color)
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3264 struct frame *f;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3265 Colormap cmap;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3266 XColor *color;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3267 {
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3268 Display *display = FRAME_X_DISPLAY (f);
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3269 Screen *screen = FRAME_X_SCREEN (f);
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3270 int rc;
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3271
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3272 gamma_correct (f, color);
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3273 rc = XAllocColor (display, cmap, color);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3274 if (rc == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3275 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3276 /* 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
3277 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
3278 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
3279 color matching with StaticColor visuals. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3280 int nearest, i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3281 unsigned long nearest_delta = ~0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3282 int ncells = XDisplayCells (display, XScreenNumberOfScreen (screen));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3283 XColor *cells = (XColor *) alloca (ncells * sizeof *cells);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3284
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3285 for (i = 0; i < ncells; ++i)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3286 cells[i].pixel = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3287 XQueryColors (display, cmap, cells, ncells);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3288
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3289 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
3290 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3291 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
3292 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
3293 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
3294 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
3295
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3296 if (delta < nearest_delta)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3297 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3298 nearest = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3299 nearest_delta = delta;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3300 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3301 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3302
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3303 color->red = cells[nearest].red;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3304 color->green = cells[nearest].green;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3305 color->blue = cells[nearest].blue;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3306 rc = XAllocColor (display, cmap, color);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3307 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3308
28356
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3309 #ifdef DEBUG_X_COLORS
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3310 if (rc)
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3311 register_color (color->pixel);
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3312 #endif /* DEBUG_X_COLORS */
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3313
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3314 return rc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3315 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3316
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3317
28356
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3318 /* 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
3319 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
3320 get color reference counts right. */
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3321
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3322 unsigned long
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3323 x_copy_color (f, pixel)
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3324 struct frame *f;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3325 unsigned long pixel;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3326 {
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3327 XColor color;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3328
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3329 color.pixel = pixel;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3330 BLOCK_INPUT;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3331 XQueryColor (FRAME_X_DISPLAY (f), FRAME_X_COLORMAP (f), &color);
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3332 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
3333 UNBLOCK_INPUT;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3334 #ifdef DEBUG_X_COLORS
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3335 register_color (pixel);
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3336 #endif
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3337 return color.pixel;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3338 }
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3339
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
3340
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3341 /* 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
3342 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
3343 get color reference counts right. */
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3344
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3345 unsigned long
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3346 x_copy_dpy_color (dpy, cmap, pixel)
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3347 Display *dpy;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3348 Colormap cmap;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3349 unsigned long pixel;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3350 {
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3351 XColor color;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3352
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3353 color.pixel = pixel;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3354 BLOCK_INPUT;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3355 XQueryColor (dpy, cmap, &color);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3356 XAllocColor (dpy, cmap, &color);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3357 UNBLOCK_INPUT;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3358 #ifdef DEBUG_X_COLORS
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3359 register_color (pixel);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3360 #endif
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3361 return color.pixel;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3362 }
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3363
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
3364
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3365 /* 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
3366 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
3367 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
3368 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
3369 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
3370 Value is non-zero if successful. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3371
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3372 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3373 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
3374 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3375 Display *display;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3376 Colormap cmap;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3377 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
3378 double factor;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3379 int delta;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3380 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3381 XColor color, new;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3382 int success_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3383
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3384 /* Get RGB color values. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3385 color.pixel = *pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3386 XQueryColor (display, cmap, &color);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3387
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3388 /* 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
3389 xassert (factor >= 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3390 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
3391 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
3392 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
3393
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3394 /* Try to allocate the color. */
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
3395 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
3396 if (success_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3397 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3398 if (new.pixel == *pixel)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3399 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3400 /* 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
3401 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
3402 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
3403
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3404 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
3405 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
3406 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
3407 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
3408 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3409 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3410 success_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3411 *pixel = new.pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3412 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3413
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3414 return success_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3415 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3416
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3417
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3418 /* 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
3419 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
3420 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
3421 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
3422 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
3423 be allocated, use DEFAULT_PIXEL, instead. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3424
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3425 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3426 x_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
3427 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3428 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
3429 double factor;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3430 int delta;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3431 unsigned long default_pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3432 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3433 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3434 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
3435 unsigned long mask = GCForeground | GCLineWidth | GCGraphicsExposures;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3436 unsigned long pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3437 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
3438 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
3439 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
3440 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
3441
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3442 xgcv.graphics_exposures = False;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3443 xgcv.line_width = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3444
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3445 /* 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
3446 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
3447 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
3448 if (relief->gc
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3449 && relief->allocated_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3450 {
27962
048184bb751e (x_alloc_lighter_color, x_setup_relief_color): Use
Gerd Moellmann <gerd@gnu.org>
parents: 27857
diff changeset
3451 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
3452 relief->allocated_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3453 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3454
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3455 /* Allocate new color. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3456 xgcv.foreground = default_pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3457 pixel = background;
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
3458 if (dpyinfo->n_planes != 1
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
3459 && 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
3460 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3461 relief->allocated_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3462 xgcv.foreground = relief->pixel = pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3463 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3464
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3465 if (relief->gc == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3466 {
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
3467 xgcv.stipple = dpyinfo->gray;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3468 mask |= GCStipple;
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
3469 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
3470 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3471 else
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
3472 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
3473 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3474
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3475
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3476 /* 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
3477
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3478 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3479 x_setup_relief_colors (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3480 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3481 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3482 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
3483 unsigned long color;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3484
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3485 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
3486 color = s->face->box_color;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3487 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3488 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3489 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3490
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3491 /* 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
3492 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
3493 color = xgcv.background;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3494 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3495
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3496 if (di->white_relief.gc == 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3497 || color != di->relief_background)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3498 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3499 di->relief_background = color;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3500 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
3501 WHITE_PIX_DEFAULT (s->f));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3502 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
3503 BLACK_PIX_DEFAULT (s->f));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3504 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3505 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3506
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3507
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3508 /* 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
3509 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
3510 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
3511 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
3512 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
3513 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
3514 when drawing. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3515
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3516 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3517 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
3518 raised_p, left_p, right_p, clip_rect)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
3519 struct frame *f;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3520 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
3521 XRectangle *clip_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3522 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3523 int i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3524 GC gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3525
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3526 if (raised_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3527 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
3528 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3529 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
3530 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
3531
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3532 /* Top. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3533 for (i = 0; i < width; ++i)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3534 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
3535 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
3536 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
3537
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3538 /* Left. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3539 if (left_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3540 for (i = 0; i < width; ++i)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3541 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
3542 left_x + i, top_y + i, left_x + i, bottom_y - i);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3543
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3544 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
3545 if (raised_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3546 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
3547 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3548 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
3549 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
3550
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3551 /* Bottom. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3552 for (i = 0; i < width; ++i)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3553 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
3554 left_x + i * left_p, bottom_y - i,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3555 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
3556
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3557 /* Right. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3558 if (right_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3559 for (i = 0; i < width; ++i)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3560 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
3561 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
3562
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3563 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
3564 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3565
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3566
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3567 /* 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
3568 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
3569 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
3570 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
3571 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
3572 rectangle to use when drawing. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3573
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3574 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3575 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
3576 left_p, right_p, clip_rect)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3577 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3578 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
3579 XRectangle *clip_rect;
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 XGCValues xgcv;
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 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
3584 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
3585 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
3586
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3587 /* Top. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3588 XFillRectangle (s->display, s->window, s->gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3589 left_x, top_y, right_x - left_x, width);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3590
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3591 /* Left. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3592 if (left_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3593 XFillRectangle (s->display, s->window, s->gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3594 left_x, top_y, width, bottom_y - top_y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3595
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3596 /* Bottom. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3597 XFillRectangle (s->display, s->window, s->gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3598 left_x, bottom_y - width, right_x - left_x, width);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3599
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3600 /* Right. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3601 if (right_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3602 XFillRectangle (s->display, s->window, s->gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3603 right_x - width, top_y, width, bottom_y - top_y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3604
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3605 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
3606 XSetClipMask (s->display, s->gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3607 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3608
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3609
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3610 /* 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
3611
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3612 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3613 x_draw_glyph_string_box (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3614 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3615 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3616 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
3617 int left_p, right_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3618 struct glyph *last_glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3619 XRectangle clip_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3620
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3621 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
3622 if (s->row->full_width_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3623 && !s->w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3624 {
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
3625 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
3626 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
3627 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
3628 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3629
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3630 /* 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
3631 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
3632 ? s->first_glyph
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3633 : s->first_glyph + s->nchars - 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3634
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3635 width = s->face->box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3636 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
3637 left_x = s->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3638 right_x = ((s->row->full_width_p
25079
3a09aae52441 (x_get_glyph_string_clip_rect): Take internal border
Gerd Moellmann <gerd@gnu.org>
parents: 25068
diff changeset
3639 ? last_x - 1
25302
0f10c1eaf8fb (x_draw_glyph_string_box): Use the background width
Gerd Moellmann <gerd@gnu.org>
parents: 25269
diff changeset
3640 : 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
3641 top_y = s->y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3642 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
3643
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3644 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
3645 || (s->hl == DRAW_MOUSE_FACE
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3646 && (s->prev == NULL
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3647 || s->prev->hl != s->hl)));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3648 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
3649 || (s->hl == DRAW_MOUSE_FACE
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3650 && (s->next == NULL
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3651 || s->next->hl != s->hl)));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3652
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3653 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
3654
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3655 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
3656 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
3657 left_p, right_p, &clip_rect);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3658 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3659 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3660 x_setup_relief_colors (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3661 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
3662 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
3663 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3664 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3665
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3666
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3667 /* 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
3668
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3669 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3670 x_draw_image_foreground (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3671 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3672 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3673 int x;
28785
796eafcfc070 (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 28686
diff changeset
3674 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
3675
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3676 /* 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
3677 right of that line. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3678 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
3679 && s->first_glyph->left_box_line_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3680 x = s->x + s->face->box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3681 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3682 x = s->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3683
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3684 /* If 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
3685 by that margin. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3686 if (s->img->margin)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3687 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3688 x += s->img->margin;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3689 y += s->img->margin;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3690 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3691
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3692 if (s->img->pixmap)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3693 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3694 if (s->img->mask)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3695 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3696 /* 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
3697 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
3698 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
3699 (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
3700 manually. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3701 unsigned long mask = (GCClipMask | GCClipXOrigin | GCClipYOrigin
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3702 | GCFunction);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3703 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3704 XRectangle clip_rect, image_rect, r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3705
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3706 xgcv.clip_mask = s->img->mask;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3707 xgcv.clip_x_origin = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3708 xgcv.clip_y_origin = y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3709 xgcv.function = GXcopy;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3710 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
3711
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3712 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
3713 image_rect.x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3714 image_rect.y = y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3715 image_rect.width = s->img->width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3716 image_rect.height = s->img->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3717 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
3718 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
3719 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
3720 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3721 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3722 {
30653
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
3723 unsigned long mask = GCClipXOrigin | GCClipYOrigin | GCFunction;
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
3724 XGCValues xgcv;
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
3725 XRectangle clip_rect, image_rect, r;
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
3726
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
3727 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
3728 image_rect.x = x;
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
3729 image_rect.y = y;
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
3730 image_rect.width = s->img->width;
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
3731 image_rect.height = s->img->height;
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
3732 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
3733 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
3734 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
3735
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3736 /* 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
3737 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
3738 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
3739 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
3740 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
3741 nothing here for mouse-face. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3742 if (s->hl == DRAW_CURSOR)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3743 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
3744 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
3745 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3746 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3747 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3748 /* 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
3749 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
3750 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
3751 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3752
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3753
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3754 /* 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
3755
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3756 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3757 x_draw_image_relief (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3758 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3759 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3760 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
3761 XRectangle r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3762 int x;
28785
796eafcfc070 (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 28686
diff changeset
3763 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
3764
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3765 /* 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
3766 right of that line. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3767 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
3768 && 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
3769 x = s->x + s->face->box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3770 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3771 x = s->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3772
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3773 /* 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
3774 by that margin. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3775 if (s->img->margin)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3776 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3777 x += s->img->margin;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3778 y += s->img->margin;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3779 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3780
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3781 if (s->hl == DRAW_IMAGE_SUNKEN
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3782 || s->hl == DRAW_IMAGE_RAISED)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3783 {
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
3784 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
3785 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
3786 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3787 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3788 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3789 thick = abs (s->img->relief);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3790 raised_p = s->img->relief > 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3791 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3792
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3793 x0 = x - thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3794 y0 = y - thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3795 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
3796 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
3797
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3798 x_setup_relief_colors (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3799 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
3800 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
3801 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3802
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3803
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3804 /* 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
3805
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3806 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3807 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
3808 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3809 Pixmap pixmap;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3810 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3811 int x;
28785
796eafcfc070 (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 28686
diff changeset
3812 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
3813
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3814 /* 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
3815 right of that line. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3816 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
3817 && 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
3818 x = s->face->box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3819 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3820 x = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3821
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3822 /* 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
3823 by that margin. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3824 if (s->img->margin)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3825 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3826 x += s->img->margin;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3827 y += s->img->margin;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3828 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3829
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3830 if (s->img->pixmap)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3831 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3832 if (s->img->mask)
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 /* 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
3835 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
3836 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
3837 (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
3838 manually. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3839 unsigned long mask = (GCClipMask | GCClipXOrigin | GCClipYOrigin
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3840 | GCFunction);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3841 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3842
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3843 xgcv.clip_mask = s->img->mask;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3844 xgcv.clip_x_origin = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3845 xgcv.clip_y_origin = y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3846 xgcv.function = GXcopy;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3847 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
3848
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3849 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
3850 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
3851 XSetClipMask (s->display, s->gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3852 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3853 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3854 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3855 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
3856 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
3857
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3858 /* 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
3859 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
3860 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
3861 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
3862 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
3863 nothing here for mouse-face. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3864 if (s->hl == DRAW_CURSOR)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3865 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
3866 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
3867 }
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 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3870 /* 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
3871 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
3872 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
3873 }
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 /* 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
3877 give the rectangle to draw. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3878
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3879 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3880 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
3881 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3882 int x, y, w, h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3883 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3884 if (s->stippled_p)
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 /* Fill background with a stipple pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3887 XSetFillStyle (s->display, s->gc, FillOpaqueStippled);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3888 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
3889 XSetFillStyle (s->display, s->gc, FillSolid);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3890 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3891 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3892 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
3893 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3894
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3895
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3896 /* Draw image glyph string S.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3897
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3898 s->y
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3899 s->x +-------------------------
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3900 | s->face->box
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 | +-------------------------
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3903 | | s->img->margin
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3904 | |
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3905 | | +-------------------
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3906 | | | the image
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 */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3909
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3910 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3911 x_draw_image_glyph_string (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3912 struct glyph_string *s;
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 int x, y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3915 int box_line_width = s->face->box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3916 int margin = s->img->margin;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3917 int height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3918 Pixmap pixmap = None;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3919
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3920 height = s->height - 2 * box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3921
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3922 /* 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
3923 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
3924 flickering. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3925 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
3926 if (height > s->img->height
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3927 || margin
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3928 || s->img->mask
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3929 || s->img->pixmap == 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3930 || s->width != s->background_width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3931 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3932 if (box_line_width && s->first_glyph->left_box_line_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3933 x = s->x + box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3934 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3935 x = s->x;
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 y = s->y + box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3938
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3939 if (s->img->mask)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3940 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3941 /* Create a pixmap as large as the glyph string Fill it with
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3942 the background color. Copy the image to it, using its
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3943 mask. Copy the temporary pixmap to the display. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3944 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
3945 int depth = DefaultDepthOfScreen (screen);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3946
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3947 /* 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
3948 pixmap = XCreatePixmap (s->display, s->window,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3949 s->background_width,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3950 s->height, depth);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3951
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3952 /* 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
3953 pixmap. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3954 XSetClipMask (s->display, s->gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3955
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3956 /* 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
3957 if (s->stippled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3958 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3959 /* Fill background with a stipple pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3960 XSetFillStyle (s->display, s->gc, FillOpaqueStippled);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3961 XFillRectangle (s->display, pixmap, s->gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3962 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
3963 XSetFillStyle (s->display, s->gc, FillSolid);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3964 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3965 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3966 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3967 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3968 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
3969 &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3970 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
3971 XFillRectangle (s->display, pixmap, s->gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3972 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
3973 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
3974 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3975 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3976 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3977 /* Implementation idea: Is it possible to construct a mask?
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3978 We could look at the color at the margins of the image, and
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3979 say that this color is probably the background color of the
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3980 image. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3981 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
3982
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3983 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3984 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3985
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3986 /* Draw the foreground. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3987 if (pixmap != None)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3988 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3989 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
3990 x_set_glyph_string_clipping (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3991 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
3992 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
3993 XFreePixmap (s->display, pixmap);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3994 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3995 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3996 x_draw_image_foreground (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3997
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3998 /* 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
3999 if (s->img->relief
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4000 || s->hl == DRAW_IMAGE_RAISED
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4001 || s->hl == DRAW_IMAGE_SUNKEN)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4002 x_draw_image_relief (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4003 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4004
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4005
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4006 /* Draw stretch glyph string S. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4007
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4008 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4009 x_draw_stretch_glyph_string (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4010 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4011 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4012 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
4013 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
4014
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4015 if (s->hl == DRAW_CURSOR
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4016 && !x_stretch_cursor_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4017 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4018 /* If `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
4019 as wide as the stretch glyph. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4020 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
4021
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4022 /* Draw cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4023 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
4024
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4025 /* 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
4026 if (width < s->background_width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4027 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4028 GC gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4029 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
4030 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
4031 XRectangle r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4032
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4033 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
4034 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
4035
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4036 if (s->face->stipple)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4037 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4038 /* Fill background with a stipple pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4039 XSetFillStyle (s->display, gc, FillOpaqueStippled);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4040 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
4041 XSetFillStyle (s->display, gc, FillSolid);
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 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4044 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4045 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4046 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
4047 XSetForeground (s->display, gc, xgcv.background);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4048 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
4049 XSetForeground (s->display, gc, xgcv.foreground);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4050 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4051 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4052 }
313
ac18f34e3e33 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 286
diff changeset
4053 else
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4054 x_draw_glyph_string_bg_rect (s, s->x, s->y, s->background_width,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4055 s->height);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4056
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4057 s->background_filled_p = 1;
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
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 /* Draw glyph string S. */
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 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4064 x_draw_glyph_string (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4065 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4066 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4067 /* If S 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
4068 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
4069 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
4070 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
4071 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4072 xassert (s->next->img == NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4073 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
4074 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
4075 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
4076 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4077
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4078 /* 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
4079 x_set_glyph_string_gc (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4080 x_set_glyph_string_clipping (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4081
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4082 switch (s->first_glyph->type)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4083 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4084 case IMAGE_GLYPH:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4085 x_draw_image_glyph_string (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4086 break;
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 case STRETCH_GLYPH:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4089 x_draw_stretch_glyph_string (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4090 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4091
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4092 case CHAR_GLYPH:
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4093 if (s->for_overlaps_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4094 s->background_filled_p = 1;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4095 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4096 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
4097 x_draw_glyph_string_foreground (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4098 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4099
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4100 case COMPOSITE_GLYPH:
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4101 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
4102 s->background_filled_p = 1;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4103 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4104 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
4105 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
4106 break;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4107
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4108 default:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4109 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4110 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4111
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4112 if (!s->for_overlaps_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4113 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4114 /* Draw underline. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4115 if (s->face->underline_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4116 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4117 unsigned long dy, h;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4118
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4119 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
4120 h = 1;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4121 if (!XGetFontProperty (s->font, XA_UNDERLINE_POSITION, &dy))
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4122 dy = s->height - h;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4123
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4124 if (s->face->underline_defaulted_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4125 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
4126 s->width, h);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4127 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4128 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4129 XGCValues xgcv;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4130 XGetGCValues (s->display, s->gc, GCForeground, &xgcv);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4131 XSetForeground (s->display, s->gc, s->face->underline_color);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4132 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
4133 s->width, h);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4134 XSetForeground (s->display, s->gc, xgcv.foreground);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4135 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4136 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4137
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4138 /* Draw overline. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4139 if (s->face->overline_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4140 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4141 unsigned long dy = 0, h = 1;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4142
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4143 if (s->face->overline_color_defaulted_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4144 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
4145 s->width, h);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4146 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4147 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4148 XGCValues xgcv;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4149 XGetGCValues (s->display, s->gc, GCForeground, &xgcv);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4150 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
4151 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
4152 s->width, h);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4153 XSetForeground (s->display, s->gc, xgcv.foreground);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4154 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4155 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4156
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4157 /* Draw strike-through. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4158 if (s->face->strike_through_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4159 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4160 unsigned long h = 1;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4161 unsigned long dy = (s->height - h) / 2;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4162
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4163 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
4164 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
4165 s->width, h);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4166 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4167 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4168 XGCValues xgcv;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4169 XGetGCValues (s->display, s->gc, GCForeground, &xgcv);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4170 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
4171 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
4172 s->width, h);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4173 XSetForeground (s->display, s->gc, xgcv.foreground);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4174 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4175 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4176
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4177 /* Draw relief. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4178 if (s->face->box != FACE_NO_BOX)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4179 x_draw_glyph_string_box (s);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4180 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4181
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4182 /* Reset clipping. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4183 XSetClipMask (s->display, s->gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4184 }
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
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4187 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
4188 struct face **, int));
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4189
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4190
30137
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4191 /* 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
4192
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4193 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
4194 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
4195 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
4196 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
4197
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4198 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
4199
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4200 static int
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4201 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
4202 struct glyph_string *s;
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4203 struct face **faces;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4204 int overlaps_p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4205 {
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4206 int i;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4207
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4208 xassert (s);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4209
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4210 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
4211
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4212 s->face = faces[s->gidx];
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4213 s->font = s->face->font;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4214 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
4215
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4216 /* 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
4217 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
4218 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
4219 ++s->nchars;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4220 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
4221 ++s->nchars;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4222
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4223 /* 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
4224 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
4225
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4226 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
4227
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4228 /* 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
4229 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
4230 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
4231 characters of the glyph string. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4232 if (s->font == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4233 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4234 s->font_not_found_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4235 s->font = FRAME_FONT (s->f);
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4238 /* 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
4239 s->ybase += s->first_glyph->voffset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4240
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4241 xassert (s->face && s->face->gc);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4242
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4243 /* 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
4244 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
4245
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4246 return s->gidx + s->nchars;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4247 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4248
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4249
30137
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4250 /* 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
4251
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4252 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
4253 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
4254 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
4255 use its physical height for clipping.
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4256
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4257 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
4258
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4259 static int
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4260 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
4261 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4262 int face_id;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4263 int start, end, overlaps_p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4264 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4265 struct glyph *glyph, *last;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4266 int voffset;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4267 int glyph_not_available_p;
24991
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 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
4270 xassert (s->nchars == 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4271 xassert (start >= 0 && end > start);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4272
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4273 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
4274 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
4275 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
4276 voffset = glyph->voffset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4277
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4278 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
4279
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4280 while (glyph < last
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4281 && glyph->type == CHAR_GLYPH
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4282 && glyph->voffset == voffset
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4283 /* Same face id implies same font, nowadays. */
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4284 && glyph->face_id == face_id
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4285 && 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
4286 {
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4287 int two_byte_p;
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4288
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4289 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
4290 s->char2b + s->nchars,
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4291 &two_byte_p);
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4292 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
4293 ++s->nchars;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4294 xassert (s->nchars <= end - start);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4295 s->width += glyph->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4296 ++glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4297 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4298
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4299 s->font = s->face->font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4300 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
4301
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4302 /* 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
4303 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
4304 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
4305 characters of the glyph string. */
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4306 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
4307 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4308 s->font_not_found_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4309 s->font = FRAME_FONT (s->f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4310 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4311
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4312 /* 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
4313 s->ybase += voffset;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4314
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4315 xassert (s->face && s->face->gc);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4316 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
4317 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4318
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4319
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4320 /* 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
4321
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4322 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4323 x_fill_image_glyph_string (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4324 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4325 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4326 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
4327 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
4328 xassert (s->img);
27000
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
4329 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
4330 s->font = s->face->font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4331 s->width = s->first_glyph->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4332
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4333 /* 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
4334 s->ybase += s->first_glyph->voffset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4335 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4336
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4337
30137
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4338 /* 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
4339
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4340 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
4341 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
4342 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
4343
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4344 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
4345
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4346 static int
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4347 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
4348 struct glyph_string *s;
30137
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4349 struct glyph_row *row;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4350 enum glyph_row_area area;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4351 int start, end;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4352 {
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4353 struct glyph *glyph, *last;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4354 int voffset, face_id;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4355
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4356 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
4357
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4358 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
4359 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
4360 face_id = glyph->face_id;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4361 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
4362 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
4363 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
4364 s->width = glyph->pixel_width;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4365 voffset = glyph->voffset;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4366
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4367 for (++glyph;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4368 (glyph < last
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4369 && glyph->type == STRETCH_GLYPH
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4370 && glyph->voffset == voffset
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4371 && glyph->face_id == face_id);
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4372 ++glyph)
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4373 s->width += glyph->pixel_width;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4374
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4375 /* 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
4376 s->ybase += voffset;
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4377
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
4378 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
4379 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
4380 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4381
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 /* 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
4384 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
4385 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
4386 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
4387 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
4388 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
4389 face-override for drawing S. */
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 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4392 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
4393 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4394 XChar2b *char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4395 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4396 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4397 enum glyph_row_area area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4398 int start;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4399 enum draw_glyphs_face hl;
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 bzero (s, sizeof *s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4402 s->w = w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4403 s->f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4404 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
4405 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
4406 s->char2b = char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4407 s->hl = hl;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4408 s->row = row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4409 s->area = area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4410 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
4411 s->height = row->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4412 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
4413
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
4414 /* 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
4415 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
4416 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
4417
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4418 s->ybase = s->y + row->ascent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4419 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4420
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4421
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4422 /* 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
4423 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
4424 in the drawing area. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4425
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4426 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4427 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
4428 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4429 int start;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4430 int last_x;
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 /* 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
4433 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
4434 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
4435
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4436 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
4437 && s->hl == DRAW_NORMAL_TEXT
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4438 && ((s->area == TEXT_AREA && s->row->fill_line_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4439 || s->face->background != default_face->background
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4440 || s->face->stipple != default_face->stipple))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4441 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
4442
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4443 /* 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
4444 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
4445 area. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4446 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
4447 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
4448 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4449 s->background_width = s->width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4450 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4451
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4452
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4453 /* 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
4454 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
4455 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
4456 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
4457 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
4458 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
4459 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
4460
25692
121bd925411f Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents: 25682
diff changeset
4461 /* 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
4462 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
4463 #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
4464 do \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4465 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4466 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
4467 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
4468 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
4469 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
4470 s->x = (X); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4471 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4472 while (0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4473
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4474
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4475 /* 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
4476 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
4477 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
4478 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
4479 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
4480 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
4481 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
4482
25692
121bd925411f Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents: 25682
diff changeset
4483 #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
4484 do \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4485 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4486 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
4487 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
4488 x_fill_image_glyph_string (s); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4489 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
4490 ++START; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4491 s->x = (X); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4492 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4493 while (0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4494
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4495
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4496 /* 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
4497 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
4498 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
4499 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
4500 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
4501 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
4502 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
4503 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
4504
25692
121bd925411f Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents: 25682
diff changeset
4505 #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
4506 do \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4507 { \
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
4508 int c, face_id; \
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4509 XChar2b *char2b; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4510 \
27000
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
4511 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
4512 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
4513 \
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4514 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
4515 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
4516 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
4517 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
4518 s->x = (X); \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4519 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
4520 OVERLAPS_P); \
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4521 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4522 while (0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4523
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4524
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4525 /* 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
4526 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
4527 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
4528 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
4529 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
4530 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
4531 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
4532 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
4533
26912
3470e4fea708 (BUILD_GLYPH_STRINGS): For pcc, remove continuation in arg list.
Dave Love <fx@gnu.org>
parents: 26879
diff changeset
4534 #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
4535 do { \
27000
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
4536 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
4537 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
4538 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
4539 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
4540 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
4541 XChar2b *char2b; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4542 struct face **faces; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4543 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
4544 int n; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4545 \
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4546 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
4547 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
4548 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
4549 /* 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
4550 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
4551 { \
27000
d7f15cd9c4ad All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents: 26968
diff changeset
4552 int c = COMPOSITION_GLYPH (cmp, n); \
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
4553 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
4554 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
4555 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
4556 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
4557 } \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4558 \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4559 /* 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
4560 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
4561 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
4562 { \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4563 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
4564 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
4565 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
4566 s->cmp = cmp; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4567 s->gidx = n; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4568 s->x = (X); \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4569 \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4570 if (n == 0) \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4571 first_s = s; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4572 \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4573 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
4574 } \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4575 \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4576 ++START; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4577 s = first_s; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4578 } while (0)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4579
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4580
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4581 /* 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
4582 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
4583 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
4584 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
4585 x-positions of the drawing area.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4586
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4587 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
4588 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
4589 asynchronously). */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4590
25692
121bd925411f Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents: 25682
diff changeset
4591 #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
4592 do \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4593 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4594 HEAD = TAIL = NULL; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4595 while (START < END) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4596 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4597 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
4598 switch (first_glyph->type) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4599 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4600 case CHAR_GLYPH: \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4601 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
4602 TAIL, HL, X, LAST_X, \
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4603 OVERLAPS_P); \
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4604 break; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4605 \
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4606 case COMPOSITE_GLYPH: \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4607 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
4608 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
4609 OVERLAPS_P); \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4610 break; \
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
4611 \
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4612 case STRETCH_GLYPH: \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4613 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
4614 HEAD, TAIL, HL, X, LAST_X); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4615 break; \
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 case IMAGE_GLYPH: \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4618 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
4619 TAIL, HL, X, LAST_X); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4620 break; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4621 \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4622 default: \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4623 abort (); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4624 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4625 \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4626 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
4627 (X) += s->width; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4628 } \
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 while (0)
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4633 /* 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
4634 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
4635 face-override with the following meaning:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4636
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4637 DRAW_NORMAL_TEXT draw normally
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4638 DRAW_CURSOR draw in cursor face
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4639 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
4640 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
4641 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
4642 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
4643
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4644 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
4645 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
4646 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
4647 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
4648 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
4649
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4650 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
4651 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
4652
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4653 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
4654
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4655 static int
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4656 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
4657 overlaps_p)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4658 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4659 int x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4660 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4661 enum glyph_row_area area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4662 int start, end;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4663 enum draw_glyphs_face hl;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4664 int *real_start, *real_end;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4665 int overlaps_p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4666 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4667 struct glyph_string *head, *tail;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4668 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4669 int last_x, area_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4670 int x_reached;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4671 int i, j;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4672
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4673 /* Let's rather be paranoid than getting a SEGV. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4674 start = max (0, start);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4675 end = min (end, row->used[area]);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4676 if (real_start)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4677 *real_start = start;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4678 if (real_end)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4679 *real_end = end;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4680
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4681 /* 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
4682 end of the drawing area. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4683 if (row->full_width_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4684 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4685 /* 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
4686 or flag areas. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4687 struct frame *f = XFRAME (w->frame);
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
4688 /* 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
4689 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
4690
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4691 x += window_left_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4692 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
4693 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
4694
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4695 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
4696 {
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
4697 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
4698 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
4699 last_x += width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4700 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4701 x -= width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4702 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4703
25083
d3b7d7d2bca8 (x_setup_relief_color): Don't try smart color allocation
Gerd Moellmann <gerd@gnu.org>
parents: 25079
diff changeset
4704 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
4705 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
4706 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4707 else
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 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
4710 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
4711 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
4712 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4713
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4714 /* 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
4715 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
4716 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
4717 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
4718 i = start;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4719 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
4720 overlaps_p);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4721 if (tail)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4722 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
4723 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4724 x_reached = x;
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 /* 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
4727 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
4728 strings built above. */
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4729 if (!overlaps_p && row->contains_overlapping_glyphs_p)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4730 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4731 int dummy_x = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4732 struct glyph_string *h, *t;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4733
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4734 /* Compute overhangs for all glyph strings. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4735 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
4736 x_compute_glyph_string_overhangs (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4737
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4738 /* 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
4739 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
4740 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
4741 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
4742 draws over it. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4743 i = x_left_overwritten (head);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4744 if (i >= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4745 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4746 j = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4747 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
4748 DRAW_NORMAL_TEXT, dummy_x, last_x,
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4749 overlaps_p);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4750 start = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4751 if (real_start)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4752 *real_start = start;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4753 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
4754 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
4755 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4756
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4757 /* 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
4758 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
4759 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
4760 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
4761 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
4762 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
4763 strings exist. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4764 i = x_left_overwriting (head);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4765 if (i >= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4766 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4767 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
4768 DRAW_NORMAL_TEXT, dummy_x, last_x,
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4769 overlaps_p);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4770 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
4771 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4772 if (real_start)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4773 *real_start = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4774 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
4775 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
4776 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4777
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4778 /* 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
4779 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
4780 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
4781 over it. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4782 i = x_right_overwritten (tail);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4783 if (i >= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4784 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4785 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
4786 DRAW_NORMAL_TEXT, x, last_x,
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4787 overlaps_p);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4788 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
4789 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
4790 if (real_end)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4791 *real_end = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4792 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4793
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4794 /* 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
4795 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
4796 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
4797 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
4798 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
4799 i = x_right_overwriting (tail);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4800 if (i >= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4801 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4802 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
4803 DRAW_NORMAL_TEXT, x, last_x,
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4804 overlaps_p);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4805 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
4806 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4807 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
4808 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
4809 if (real_end)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4810 *real_end = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4811 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4812 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4813
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4814 /* Draw all strings. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4815 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
4816 x_draw_glyph_string (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4817
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4818 /* 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
4819 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
4820 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
4821 if (!row->full_width_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4822 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4823 if (area > LEFT_MARGIN_AREA)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4824 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
4825 if (area > TEXT_AREA)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4826 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
4827 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4828 return x_reached;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4829 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4830
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4831
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4832 /* 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
4833
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4834 static void
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4835 x_fix_overlapping_area (w, row, area)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4836 struct window *w;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4837 struct glyph_row *row;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4838 enum glyph_row_area area;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4839 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4840 int i, x;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4841
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4842 BLOCK_INPUT;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4843
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4844 if (area == LEFT_MARGIN_AREA)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4845 x = 0;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4846 else if (area == TEXT_AREA)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4847 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
4848 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4849 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
4850 + window_box_width (w, TEXT_AREA));
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4851
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4852 for (i = 0; i < row->used[area];)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4853 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4854 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
4855 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4856 int start = i, start_x = x;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4857
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4858 do
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4859 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4860 x += row->glyphs[area][i].pixel_width;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4861 ++i;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4862 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4863 while (i < row->used[area]
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4864 && row->glyphs[area][i].overlaps_vertically_p);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4865
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4866 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
4867 (row->inverse_p
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4868 ? DRAW_INVERSE_VIDEO : DRAW_NORMAL_TEXT),
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4869 NULL, NULL, 1);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4870 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4871 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4872 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4873 x += row->glyphs[area][i].pixel_width;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4874 ++i;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4875 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4876 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4877
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4878 UNBLOCK_INPUT;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4879 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4880
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4881
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4882 /* 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
4883 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
4884 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
4885 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
4886 row being updated. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4887
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4888 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4889 x_write_glyphs (start, len)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4890 struct glyph *start;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4891 int len;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4892 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4893 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
4894
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4895 xassert (updated_window && updated_row);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4896 BLOCK_INPUT;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4897
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4898 /* Write glyphs. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4899
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4900 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
4901 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
4902 updated_row, updated_area,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4903 hpos, hpos + len,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4904 (updated_row->inverse_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4905 ? DRAW_INVERSE_VIDEO : DRAW_NORMAL_TEXT),
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4906 &real_start, &real_end, 0);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4907
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4908 /* 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
4909 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
4910 real_end - real_start);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4911
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4912 UNBLOCK_INPUT;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4913
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4914 /* Advance the output cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4915 output_cursor.hpos += len;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4916 output_cursor.x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4917 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4918
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4919
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4920 /* 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
4921
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4922 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4923 x_insert_glyphs (start, len)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4924 struct glyph *start;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4925 register int len;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4926 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4927 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4928 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4929 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
4930 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4931 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4932 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
4933
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4934 xassert (updated_window && updated_row);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4935 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4936 w = updated_window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4937 f = XFRAME (WINDOW_FRAME (w));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4938
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4939 /* 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
4940 row = updated_row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4941 line_height = row->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4942
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4943 /* 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
4944 shift_by_width = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4945 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
4946 shift_by_width += glyph->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4947
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4948 /* 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
4949 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
4950 - output_cursor.x
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4951 - shift_by_width);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4952
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4953 /* Shift right. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4954 frame_x = WINDOW_TO_FRAME_PIXEL_X (w, output_cursor.x);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4955 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
4956 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
4957 f->output_data.x->normal_gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4958 frame_x, frame_y,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4959 shifted_region_width, line_height,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4960 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
4961
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4962 /* Write the glyphs. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4963 hpos = start - row->glyphs[updated_area];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4964 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
4965 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
4966 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
4967
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4968 /* Advance the output cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4969 output_cursor.hpos += len;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4970 output_cursor.x += shift_by_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4971 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4972 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4973
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4974
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4975 /* 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
4976 for X frames. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4977
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4978 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4979 x_delete_glyphs (n)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4980 register int n;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4981 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4982 abort ();
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4985
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4986 /* 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
4987 (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
4988 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
4989
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4990 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
4991 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
4992
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4993 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4994 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
4995 int to_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4996 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4997 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4998 struct window *w = updated_window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4999 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
5000 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
5001
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5002 xassert (updated_window && updated_row);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5003 f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5004
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5005 if (updated_row->full_width_p)
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 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
5008 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
5009 && !w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5010 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
5011 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5012 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5013 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
5014 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
5015
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5016 /* 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
5017 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
5018 if (to_x == 0)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5019 return;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5020 else if (to_x < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5021 to_x = max_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5022 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5023 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
5024
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5025 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
5026
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
5027 /* 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
5028 if (!updated_row->full_width_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5029 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
5030
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5031 from_x = output_cursor.x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5032
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5033 /* Translate to frame coordinates. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5034 if (updated_row->full_width_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5035 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5036 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
5037 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
5038 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5039 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5040 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5041 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
5042 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
5043 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5044
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
5045 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
5046 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
5047 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
5048
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5049 /* 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
5050 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
5051 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5052 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5053 XClearArea (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5054 from_x, from_y, to_x - from_x, to_y - from_y,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5055 False);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5056 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5057 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5058 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5059
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5060
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5061 /* 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
5062 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
5063
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5064 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5065 x_clear_frame ()
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5066 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5067 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5068
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5069 if (updating_frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5070 f = updating_frame;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5071 else
25682
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5072 f = SELECTED_FRAME ();
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5073
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5074 /* 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
5075 longer visible. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5076 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
5077 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
5078 output_cursor.x = -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5079
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5080 /* 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
5081 follow an explicit cursor_to. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5082 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
5083 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
5084
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5085 /* 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
5086 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
5087 x_scroll_bar_clear (f);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5088
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
5089 XFlush (FRAME_X_DISPLAY (f));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5090 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5091 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5092
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5093
6791
7036e4fd549f (dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents: 6767
diff changeset
5094
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5095 /* 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
5096
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5097 /* 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
5098 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
5099
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5100 #if defined (HAVE_TIMEVAL) && defined (HAVE_SELECT)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5101
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5102
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5103 /* 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
5104 *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
5105
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5106 static int
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5107 timeval_subtract (result, x, y)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5108 struct timeval *result, x, y;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5109 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5110 /* 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
5111 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
5112 if (x.tv_usec < y.tv_usec)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5113 {
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5114 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
5115 y.tv_usec -= 1000000 * nsec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5116 y.tv_sec += nsec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5117 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5118
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5119 if (x.tv_usec - y.tv_usec > 1000000)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5120 {
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5121 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
5122 y.tv_usec += 1000000 * nsec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5123 y.tv_sec -= nsec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5124 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5125
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5126 /* 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
5127 positive. */
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5128 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
5129 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
5130
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5131 /* 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
5132 negative. */
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5133 return x.tv_sec < y.tv_sec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5134 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5135
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
5136 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5137 XTflash (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5138 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5139 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5140 BLOCK_INPUT;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5141
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5142 {
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5143 GC gc;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5144
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5145 /* 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
5146 pixels into background pixels. */
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5147 {
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5148 XGCValues values;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5149
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5150 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
5151 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
5152 ^ f->output_data.x->background_pixel);
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
5153
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
5154 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
5155 GCFunction | GCForeground, &values);
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5156 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5157
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5158 {
16352
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5159 /* 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
5160 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
5161 /* 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
5162 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
5163 /* 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
5164 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
5165 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
5166
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5167 int width;
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5168
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5169 /* 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
5170 edge it is next to. */
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5171 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
5172 {
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5173 case vertical_scroll_bar_left:
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5174 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
5175 break;
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5176
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5177 case vertical_scroll_bar_right:
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5178 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
5179 break;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5180
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5181 default:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5182 break;
16352
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5183 }
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5184
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5185 width = flash_right - flash_left;
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5186
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5187 /* 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
5188 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
5189 {
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5190 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
5191 flash_left,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5192 (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
5193 + 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
5194 width, flash_height);
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5195 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
5196 flash_left,
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5197 (height - flash_height
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5198 - FRAME_INTERNAL_BORDER_WIDTH (f)),
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5199 width, flash_height);
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5200 }
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5201 else
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5202 /* 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
5203 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
5204 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
5205 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
5206
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5207 x_flush (f);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5208
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5209 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5210 struct timeval wakeup;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5211
5362
d1fa597d923d (XTflush): FIx typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 5357
diff changeset
5212 EMACS_GET_TIME (wakeup);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5213
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5214 /* 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
5215 wakeup.tv_usec += 150000;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5216 wakeup.tv_sec += (wakeup.tv_usec / 1000000);
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5217 wakeup.tv_usec %= 1000000;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5218
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5219 /* Keep waiting until past the time wakeup. */
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5220 while (1)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5221 {
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5222 struct timeval timeout;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5223
5362
d1fa597d923d (XTflush): FIx typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 5357
diff changeset
5224 EMACS_GET_TIME (timeout);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5225
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5226 /* In effect, timeout = wakeup - timeout.
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5227 Break if result would be negative. */
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5228 if (timeval_subtract (&timeout, wakeup, timeout))
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5229 break;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5230
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5231 /* 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
5232 select (0, NULL, NULL, NULL, &timeout);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5233 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5234 }
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
5235
16352
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5236 /* 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
5237 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
5238 {
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5239 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
5240 flash_left,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5241 (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
5242 + 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
5243 width, flash_height);
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5244 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
5245 flash_left,
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5246 (height - flash_height
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5247 - FRAME_INTERNAL_BORDER_WIDTH (f)),
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5248 width, flash_height);
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5249 }
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5250 else
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
5251 /* 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
5252 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
5253 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
5254 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
5255
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
5256 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
5257 x_flush (f);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5258 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5259 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5260
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5261 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5262 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5263
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5264 #endif /* defined (HAVE_TIMEVAL) && defined (HAVE_SELECT) */
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5265
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5266
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5267 /* Make audible bell. */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5268
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
5269 void
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5270 XTring_bell ()
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5271 {
25682
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5272 struct frame *f = SELECTED_FRAME ();
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5273
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5274 if (FRAME_X_DISPLAY (f))
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5275 {
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5276 #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
5277 if (visible_bell)
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5278 XTflash (f);
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5279 else
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5280 #endif
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5281 {
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5282 BLOCK_INPUT;
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5283 XBell (FRAME_X_DISPLAY (f), 0);
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5284 XFlush (FRAME_X_DISPLAY (f));
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5285 UNBLOCK_INPUT;
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5286 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5287 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5288 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5289
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5290
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5291 /* Specify how many text lines, from the top of the window,
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5292 should be affected by insert-lines and delete-lines operations.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5293 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
5294 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
5295
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
5296 static void
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5297 XTset_terminal_window (n)
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5298 register int n;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5299 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5300 /* This function intentionally left blank. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5301 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5302
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5303
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5304
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 Line Dance
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5307 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5308
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5309 /* 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
5310 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
5311
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5312 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5313 x_ins_del_lines (vpos, n)
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
5314 int vpos, n;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5315 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5316 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5317 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5318
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5319
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5320 /* 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
5321
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5322 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5323 x_scroll_run (w, run)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5324 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5325 struct run *run;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5326 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5327 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5328 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
5329
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5330 /* 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
5331 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
5332 left and right of W. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5333 window_box (w, -1, &x, &y, &width, &height);
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
5334 width += FRAME_X_FLAGS_AREA_WIDTH (f);
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
5335 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
5336
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5337 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
5338 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
5339 bottom_y = y + height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5340
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5341 if (to_y < from_y)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5342 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5343 /* 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
5344 line at the bottom. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5345 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
5346 height = bottom_y - from_y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5347 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5348 height = run->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5349 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5350 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5351 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5352 /* 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
5353 at the bottom. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5354 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
5355 height = bottom_y - to_y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5356 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5357 height = run->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5358 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5359
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5360 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5361
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5362 /* 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
5363 updated_window = w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5364 x_clear_cursor (w);
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 XCopyArea (FRAME_X_DISPLAY (f),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5367 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
5368 f->output_data.x->normal_gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5369 x, from_y,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5370 width, height,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5371 x, to_y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5372
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5373 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5374 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5375
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5378 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5379 Exposure Events
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5380 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5381
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5382 /* 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
5383 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
5384 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
5385 the entire frame. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5386
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5387 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5388 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
5389 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5390 int x, y, w, h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5391 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5392 XRectangle r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5393
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5394 TRACE ((stderr, "expose_frame "));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5395
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5396 /* 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
5397 if (FRAME_GARBAGED_P (f))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5398 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5399 TRACE ((stderr, " garbaged\n"));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5400 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5401 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5402
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5403 /* 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
5404 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
5405 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
5406 if (FRAME_FACE_CACHE (f) == NULL
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5407 || 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
5408 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5409 TRACE ((stderr, " no faces\n"));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5410 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5411 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5412
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5413 if (w == 0 || h == 0)
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 r.x = r.y = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5416 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
5417 r.height = CANON_Y_UNIT (f) * f->height;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5418 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5419 else
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5420 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5421 r.x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5422 r.y = y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5423 r.width = w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5424 r.height = h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5425 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5426
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5427 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
5428 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
5429
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
5430 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
5431 {
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
5432 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
5433 XRectangle window_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5434 XRectangle intersection_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5435 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
5436
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5437
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5438 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
5439 window_rect.x = window_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5440 window_rect.y = window_y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5441 window_rect.width = window_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5442 window_rect.height = window_height;
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 if (x_intersect_rectangles (&r, &window_rect, &intersection_rect))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5445 expose_window (w, &intersection_rect);
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5448 #ifndef USE_X_TOOLKIT
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5449 if (WINDOWP (f->menu_bar_window))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5450 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5451 struct window *w = XWINDOW (f->menu_bar_window);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5452 XRectangle window_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5453 XRectangle intersection_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5454 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
5455
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5456
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5457 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
5458 window_rect.x = window_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5459 window_rect.y = window_y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5460 window_rect.width = window_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5461 window_rect.height = window_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5462
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5463 if (x_intersect_rectangles (&r, &window_rect, &intersection_rect))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5464 expose_window (w, &intersection_rect);
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 #endif /* not USE_X_TOOLKIT */
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5470 /* 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
5471 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
5472
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5473 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5474 expose_window_tree (w, r)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5475 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5476 XRectangle *r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5477 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5478 while (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5479 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5480 if (!NILP (w->hchild))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5481 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
5482 else if (!NILP (w->vchild))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5483 expose_window_tree (XWINDOW (w->vchild), r);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5484 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5485 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5486 XRectangle window_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5487 XRectangle intersection_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5488 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5489 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
5490
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5491 /* Frame-relative pixel rectangle of W. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5492 window_box (w, -1, &window_x, &window_y, &window_width,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5493 &window_height);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5494 window_rect.x
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5495 = (window_x
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
5496 - FRAME_X_LEFT_FLAGS_AREA_WIDTH (f)
25391
2869085f6edc (expose_window_tree): Fix typo CANON_Y_UNIT to
Gerd Moellmann <gerd@gnu.org>
parents: 25360
diff changeset
5497 - FRAME_LEFT_SCROLL_BAR_WIDTH (f) * CANON_X_UNIT (f));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5498 window_rect.y = window_y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5499 window_rect.width
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5500 = (window_width
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
5501 + 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
5502 + 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
5503 window_rect.height
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5504 = window_height + CURRENT_MODE_LINE_HEIGHT (w);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5505
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5506 if (x_intersect_rectangles (r, &window_rect, &intersection_rect))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5507 expose_window (w, &intersection_rect);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5508 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5509
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5510 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
5511 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5512 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5513
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5514
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5515 /* 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
5516 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
5517
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5518 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5519 expose_area (w, row, r, area)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5520 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5521 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5522 XRectangle *r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5523 enum glyph_row_area area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5524 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5525 int x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5526 struct glyph *first = row->glyphs[area];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5527 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
5528 struct glyph *last;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5529 int first_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5530
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5531 /* Set x to the window-relative start position for drawing glyphs of
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5532 AREA. The first glyph of the text area can be partially visible.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5533 The first glyphs of other areas cannot. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5534 if (area == LEFT_MARGIN_AREA)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5535 x = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5536 else if (area == TEXT_AREA)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5537 x = row->x + window_box_width (w, LEFT_MARGIN_AREA);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5538 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5539 x = (window_box_width (w, LEFT_MARGIN_AREA)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5540 + window_box_width (w, TEXT_AREA));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5541
25306
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5542 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
5543 /* If row extends face to end of line write the whole line. */
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5544 x_draw_glyphs (w, x, row, area,
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5545 0, row->used[area],
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5546 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
5547 NULL, NULL, 0);
25306
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5548 else
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5549 {
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5550 /* 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
5551 while (first < end
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5552 && 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
5553 {
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5554 x += first->pixel_width;
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5555 ++first;
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5556 }
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5557
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5558 /* Find the last one. */
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5559 last = first;
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5560 first_x = x;
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5561 while (last < end
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5562 && 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
5563 {
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5564 x += last->pixel_width;
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5565 ++last;
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5566 }
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5567
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5568 /* Repaint. */
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5569 if (last > first)
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5570 x_draw_glyphs (w, first_x, row, area,
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5571 first - row->glyphs[area],
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5572 last - row->glyphs[area],
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5573 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
5574 NULL, NULL, 0);
5bcee7af1643 (expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents: 25302
diff changeset
5575 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5576 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5577
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5578
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5579 /* 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
5580 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
5581
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5582 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5583 expose_line (w, row, r)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5584 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5585 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5586 XRectangle *r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5587 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5588 xassert (row->enabled_p);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5589
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5590 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
5591 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
5592 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
5593 NULL, NULL, 0);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5594 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5595 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5596 if (row->used[LEFT_MARGIN_AREA])
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5597 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
5598 if (row->used[TEXT_AREA])
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5599 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
5600 if (row->used[RIGHT_MARGIN_AREA])
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5601 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
5602 x_draw_row_bitmaps (w, row);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5603 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5604 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5605
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5606
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5607 /* 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
5608
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5609 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5610 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
5611 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5612 XRectangle *r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5613 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5614 XRectangle cr, result;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5615 struct glyph *cursor_glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5616
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5617 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
5618 if (cursor_glyph)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5619 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5620 cr.x = w->phys_cursor.x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5621 cr.y = w->phys_cursor.y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5622 cr.width = cursor_glyph->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5623 cr.height = w->phys_cursor_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5624 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
5625 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5626 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5627 return 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5628 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5629
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5630
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5631 /* Redraw a rectangle of window W. R is a rectangle in window
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5632 relative coordinates. Call this function with input blocked. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5633
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5634 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5635 expose_window (w, r)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5636 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5637 XRectangle *r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5638 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5639 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5640 int y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5641 int yb = window_text_bottom_y (w);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5642 int cursor_cleared_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5643
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
5644 /* 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
5645 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
5646 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
5647 created window. */
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
5648 if (w->current_matrix == NULL)
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
5649 return;
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
5650
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5651 TRACE ((stderr, "expose_window (%d, %d, %d, %d)\n",
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5652 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
5653
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5654 /* Convert to window coordinates. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5655 r->x = FRAME_TO_WINDOW_PIXEL_X (w, r->x);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5656 r->y = FRAME_TO_WINDOW_PIXEL_Y (w, r->y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5657
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5658 /* Turn off the cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5659 if (!w->pseudo_window_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5660 && 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
5661 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5662 x_clear_cursor (w);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5663 cursor_cleared_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5664 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5665 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5666 cursor_cleared_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5667
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5668 /* Find the first row intersecting the rectangle R. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5669 row = w->current_matrix->rows;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5670 y = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5671 while (row->enabled_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5672 && y < yb
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5673 && y + row->height < r->y)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5674 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5675 y += row->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5676 ++row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5677 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5678
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5679 /* Display the text in the rectangle, one text line at a time. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5680 while (row->enabled_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5681 && y < yb
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5682 && y < r->y + r->height)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5683 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5684 expose_line (w, row, r);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5685 y += row->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5686 ++row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5687 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5688
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5689 /* Display the mode line if there is one. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5690 if (WINDOW_WANTS_MODELINE_P (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5691 && (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
5692 row->enabled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5693 && row->y < r->y + r->height)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5694 expose_line (w, row, r);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5695
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5696 if (!w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5697 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5698 /* Draw border between windows. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5699 x_draw_vertical_border (w);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5700
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5701 /* Turn the cursor on again. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5702 if (cursor_cleared_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5703 x_update_window_cursor (w, 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5704 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5705 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5706
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5707
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5708 /* 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
5709 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
5710 empty. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5711
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5712 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5713 x_intersect_rectangles (r1, r2, result)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5714 XRectangle *r1, *r2, *result;
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 XRectangle *left, *right;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5717 XRectangle *upper, *lower;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5718 int intersection_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5719
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5720 /* 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
5721 if (r1->x < r2->x)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5722 left = r1, right = r2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5723 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5724 left = r2, right = r1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5725
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5726 /* 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
5727 otherwise there is no intersection. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5728 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
5729 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5730 result->x = right->x;
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 /* 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
5733 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
5734 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
5735 - result->x);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5736
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5737 /* Same game for Y. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5738 if (r1->y < r2->y)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5739 upper = r1, lower = r2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5740 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5741 upper = r2, lower = r1;
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 /* 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
5744 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
5745 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
5746 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5747 result->y = lower->y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5748
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5749 /* 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
5750 ends of upper and lower. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5751 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
5752 upper->y + upper->height)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5753 - result->y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5754 intersection_p = 1;
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 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5757
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5758 return intersection_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5759 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5760
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5761
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
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5764
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5765 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
5766 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
5767 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5768 {
3943
cbdf67dd68d0 * xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents: 3938
diff changeset
5769 /* 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
5770 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
5771 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
5772 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
5773 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
5774 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
5775 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
5776 UNBLOCK_INPUT;
12431
80a5aedfb4c7 (XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents: 12192
diff changeset
5777 x_update_cursor (f, 1);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5778 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5779
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5780 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
5781 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
5782 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5783 {
3943
cbdf67dd68d0 * xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents: 3938
diff changeset
5784 /* 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
5785 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
5786 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
5787 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
5788 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
5789 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
5790 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
5791 UNBLOCK_INPUT;
12431
80a5aedfb4c7 (XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents: 12192
diff changeset
5792 x_update_cursor (f, 1);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5793 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5794
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5795 /* The focus has changed. Update the frames as necessary to reflect
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5796 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
5797 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
5798 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
5799 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
5800
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
5801 static void
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5802 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
5803 struct x_display_info *dpyinfo;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5804 struct frame *frame;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5805 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5806 struct frame *old_focus = dpyinfo->x_focus_frame;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5807
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5808 if (frame != dpyinfo->x_focus_frame)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5809 {
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
5810 /* Set this before calling other routines, so that they see
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5811 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
5812 dpyinfo->x_focus_frame = frame;
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
5813
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
5814 if (old_focus && old_focus->auto_lower)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5815 x_lower_frame (old_focus);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5816
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5817 #if 0
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5818 selected_frame = frame;
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
5819 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
5820 selected_frame);
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5821 Fselect_window (selected_frame->selected_window);
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5822 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
5823 #endif /* ! 0 */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5824
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5825 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
5826 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
5827 else
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
5828 pending_autoraise_frame = 0;
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
5829 }
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
5830
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5831 x_frame_rehighlight (dpyinfo);
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
5832 }
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
5833
10223
97fc8c6b4a74 (XTupdate_begin): Discard records of prior mouse highlight
Richard M. Stallman <rms@gnu.org>
parents: 9823
diff changeset
5834 /* 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
5835
97fc8c6b4a74 (XTupdate_begin): Discard records of prior mouse highlight
Richard M. Stallman <rms@gnu.org>
parents: 9823
diff changeset
5836 void
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5837 x_mouse_leave (dpyinfo)
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5838 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
5839 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5840 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
5841 }
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
5842
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5843 /* 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
5844 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
5845 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
5846
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5847 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
5848 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
5849 the appropriate X display info. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5850
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
5851 static void
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5852 XTframe_rehighlight (frame)
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5853 struct frame *frame;
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
5854 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5855 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
5856 }
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5857
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5858 static void
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5859 x_frame_rehighlight (dpyinfo)
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5860 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
5861 {
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5862 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
5863
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5864 if (dpyinfo->x_focus_frame)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5865 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5866 dpyinfo->x_highlight_frame
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5867 = ((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
5868 ? 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
5869 : dpyinfo->x_focus_frame);
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5870 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
5871 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5872 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
5873 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
5874 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5875 }
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
5876 else
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5877 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
5878
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5879 if (dpyinfo->x_highlight_frame != old_highlight)
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
5880 {
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
5881 if (old_highlight)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5882 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
5883 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
5884 frame_highlight (dpyinfo->x_highlight_frame);
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
5885 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5886 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5887
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5888
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5889
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5890 /* Keyboard processing - modifier keys, vendor-specific keysyms, etc. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5891
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5892 /* 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
5893 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
5894 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
5895 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
5896 {
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
5897 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
5898 KeySym *syms;
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5899 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
5900 XModifierKeymap *mods;
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5901
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
5902 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
5903 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
5904 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
5905 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
5906 dpyinfo->hyper_mod_mask = 0;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
5907
2127
adaf588e32a6 * xterm.c (x_find_modifier_meanings): XDisplayKeycodes only
Jim Blandy <jimb@redhat.com>
parents: 2064
diff changeset
5908 #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
5909 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
5910 #else
13884
26245345f6f1 (x_find_modifier_meanings): Fix !X11R4 code to use dpyinfo.
Richard M. Stallman <rms@gnu.org>
parents: 13782
diff changeset
5911 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
5912 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
5913 #endif
adaf588e32a6 * xterm.c (x_find_modifier_meanings): XDisplayKeycodes only
Jim Blandy <jimb@redhat.com>
parents: 2064
diff changeset
5914
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
5915 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
5916 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
5917 &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
5918 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
5919
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
5920 /* 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
5921 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
5922 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5923 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
5924
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5925 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
5926 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
5927 {
10287
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
5928 KeyCode code
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
5929 = 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
5930
6560
a071babfa9ea (x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents: 6521
diff changeset
5931 /* Zeroes are used for filler. Skip them. */
a071babfa9ea (x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents: 6521
diff changeset
5932 if (code == 0)
a071babfa9ea (x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents: 6521
diff changeset
5933 continue;
a071babfa9ea (x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents: 6521
diff changeset
5934
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5935 /* 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
5936 {
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5937 int code_col;
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5938
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5939 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
5940 {
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
5941 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
5942
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
5943 switch (sym)
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5944 {
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
5945 case XK_Meta_L:
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
5946 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
5947 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
5948 break;
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
5949
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
5950 case XK_Alt_L:
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
5951 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
5952 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
5953 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
5954
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
5955 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
5956 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
5957 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
5958 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
5959
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
5960 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
5961 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
5962 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
5963 break;
1436
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
5964
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
5965 case XK_Shift_Lock:
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
5966 /* 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
5967 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
5968 dpyinfo->shift_lock_mask = LockMask;
1436
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
5969 break;
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5970 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5971 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5972 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5973 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5974 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5975
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
5976 /* 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
5977 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
5978 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
5979 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
5980 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
5981 }
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
5982
2923
c8997402dd6b (x_find_modifier_meanings): If some keys are meta and alt,
Richard M. Stallman <rms@gnu.org>
parents: 2882
diff changeset
5983 /* 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
5984 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
5985 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
5986 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
5987 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
5988 }
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
5989
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5990 XFree ((char *) syms);
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
5991 XFreeModifiermap (mods);
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5992 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5993
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
5994 /* 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
5995 Emacs uses. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5996
1530
a7f8a1fe258e * xterm.c (x_convert_modifiers): Declare this to return an
Jim Blandy <jimb@redhat.com>
parents: 1436
diff changeset
5997 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
5998 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
5999 struct x_display_info *dpyinfo;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6000 unsigned int state;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6001 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
6002 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
6003 | ((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
6004 | ((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
6005 | ((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
6006 | ((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
6007 | ((state & dpyinfo->hyper_mod_mask) ? hyper_modifier : 0));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6008 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6009
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
6010 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
6011 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
6012 struct x_display_info *dpyinfo;
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
6013 unsigned int state;
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
6014 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
6015 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
6016 | ((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
6017 | ((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
6018 | ((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
6019 | ((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
6020 | ((state & meta_modifier) ? dpyinfo->meta_mod_mask : 0));
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
6021 }
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6022
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6023 /* Convert a keysym to its name. */
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6024
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6025 char *
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6026 x_get_keysym_name (keysym)
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6027 KeySym keysym;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6028 {
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6029 char *value;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6030
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6031 BLOCK_INPUT;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6032 value = XKeysymToString (keysym);
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6033 UNBLOCK_INPUT;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6034
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6035 return value;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
6036 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6037
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6038
3585
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6039
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6040 /* Mouse clicks and mouse movement. Rah. */
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6041
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6042 /* 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
6043 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
6044 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
6045 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
6046
6023
67aa546e4ff1 (construct_menu_click): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 6022
diff changeset
6047 void
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6048 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
6049 FRAME_PTR f;
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6050 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
6051 register int *x, *y;
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6052 XRectangle *bounds;
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6053 int noclip;
3585
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6054 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6055 /* 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
6056 even for negative values. */
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6057 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
6058 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
6059 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
6060 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
6061
3585
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6062 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
6063 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
6064
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6065 if (bounds)
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6066 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
6067 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
6068 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
6069 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
6070 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
6071 }
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6072
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6073 if (!noclip)
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6074 {
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6075 if (pix_x < 0)
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6076 pix_x = 0;
16301
a02555b4b2b9 (x_scroll_bar_create, x_scroll_bar_move):
Richard M. Stallman <rms@gnu.org>
parents: 16251
diff changeset
6077 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
6078 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
6079
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6080 if (pix_y < 0)
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6081 pix_y = 0;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6082 else if (pix_y > f->height)
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6083 pix_y = f->height;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6084 }
3585
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6085
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6086 *x = pix_x;
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6087 *y = pix_y;
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6088 }
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
6089
24991
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 /* 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
6092 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
6093 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
6094 return 0. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6095
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6096 int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6097 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
6098 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6099 int hpos, vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6100 int *frame_x, *frame_y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6101 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6102 int success_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6103
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6104 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
6105 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
6106
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6107 if (display_completed)
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 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
6110 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
6111 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
6112
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6113 *frame_y = row->y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6114 *frame_x = row->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6115 while (glyph < end)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6116 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6117 *frame_x += glyph->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6118 ++glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6119 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6120
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6121 success_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6122 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6123 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6124 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6125 *frame_y = *frame_x = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6126 success_p = 0;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6129 *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
6130 *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
6131 return success_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6132 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6133
6055
a9f61727a90c (construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents: 6023
diff changeset
6134
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6135 /* Prepare a mouse-event in *RESULT for placement in the input queue.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6136
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6137 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
6138 the mouse. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6139
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6140 static Lisp_Object
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
6141 construct_mouse_click (result, event, f)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6142 struct input_event *result;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6143 XButtonEvent *event;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
6144 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6145 {
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
6146 /* 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
6147 otherwise. */
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
6148 result->kind = mouse_click;
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6149 result->code = event->button - Button1;
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 642
diff changeset
6150 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
6151 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
6152 event->state)
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
6153 | (event->type == ButtonRelease
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
6154 ? up_modifier
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
6155 : down_modifier));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6156
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6157 XSETINT (result->x, event->x);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6158 XSETINT (result->y, event->y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6159 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
6160 result->arg = Qnil;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6161 return Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6162 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6163
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6164
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6165 /* Function to report a mouse movement to the mainstream Emacs code.
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6166 The input handler calls this.
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6167
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6168 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
6169 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
6170 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
6171 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
6172
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6173 static XMotionEvent last_mouse_motion_event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6174 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
6175
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6176 static void
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6177 note_mouse_movement (frame, event)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
6178 FRAME_PTR frame;
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6179 XMotionEvent *event;
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6180 {
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
6181 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
6182 last_mouse_motion_event = *event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6183 XSETFRAME (last_mouse_motion_frame, frame);
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
6184
7680
8212755ff793 (note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 7651
diff changeset
6185 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
6186 {
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
6187 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
6188 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
6189 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
6190 }
8212755ff793 (note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 7651
diff changeset
6191
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6192 /* 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
6193 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
6194 || 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
6195 || 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
6196 || 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
6197 {
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
6198 frame->mouse_moved = 1;
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
6199 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
6200 note_mouse_highlight (frame, event->x, event->y);
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6201 }
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6202 }
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6203
6644
8e2379ce4fcb (fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents: 6631
diff changeset
6204 /* 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
6205
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6206 int disable_mouse_highlight;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6207
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6208
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6209
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6210 /************************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6211 Mouse Face
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6212 ************************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6213
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6214 /* 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
6215 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
6216 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
6217 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
6218 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
6219 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
6220 date. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6221
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6222 static struct glyph *
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6223 x_y_to_hpos_vpos (w, x, y, hpos, vpos, area)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6224 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6225 int x, y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6226 int *hpos, *vpos, *area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6227 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6228 struct glyph *glyph, *end;
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
6229 struct glyph_row *row = NULL;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6230 int x0, i, left_area_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6231
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6232 /* 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
6233 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
6234 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6235 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
6236 if (!row->enabled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6237 return NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6238 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
6239 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6240 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6241
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6242 *vpos = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6243 *hpos = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6244
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6245 /* 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
6246 if (i == w->current_matrix->nrows)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6247 return NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6248
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6249 /* Get the glyph area containing X. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6250 if (w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6251 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6252 *area = TEXT_AREA;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6253 x0 = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6254 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6255 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6256 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6257 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
6258 if (x < left_area_width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6259 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6260 *area = LEFT_MARGIN_AREA;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6261 x0 = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6262 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6263 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
6264 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6265 *area = TEXT_AREA;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6266 x0 = row->x + left_area_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6267 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6268 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6269 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6270 *area = RIGHT_MARGIN_AREA;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6271 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
6272 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6273 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6274
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6275 /* Find glyph containing X. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6276 glyph = row->glyphs[*area];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6277 end = glyph + row->used[*area];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6278 while (glyph < end)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6279 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6280 if (x < x0 + glyph->pixel_width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6281 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6282 if (w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6283 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6284 else if (BUFFERP (glyph->object))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6285 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6286 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6287
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6288 x0 += glyph->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6289 ++glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6290 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6291
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6292 if (glyph == end)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6293 return NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6294
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6295 *hpos = glyph - row->glyphs[*area];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6296 return glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6297 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6298
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6299
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6300 /* 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
6301 Takes pseudo-windows into account. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6302
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6303 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6304 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
6305 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6306 int *x, *y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6307 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6308 if (w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6309 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6310 /* 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
6311 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
6312 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6313 *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
6314 *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
6315 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6316 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6317 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6318 *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
6319 *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
6320 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6321 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6322
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6323
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6324 /* Take proper action when mouse has moved to the mode or top line of
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6325 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
6326 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
6327 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
6328 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
6329
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6330 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6331 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
6332 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6333 int x, mode_line_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6334 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6335 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6336 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
6337 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
6338 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6339
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6340 if (mode_line_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6341 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
6342 else
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
6343 row = MATRIX_HEADER_LINE_ROW (w->current_matrix);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6344
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6345 if (row->enabled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6346 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6347 struct glyph *glyph, *end;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6348 Lisp_Object help, map;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6349 int x0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6350
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6351 /* Find the glyph under X. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6352 glyph = row->glyphs[TEXT_AREA];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6353 end = glyph + row->used[TEXT_AREA];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6354 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
6355 + 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
6356 while (glyph < end
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6357 && x >= x0 + glyph->pixel_width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6358 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6359 x0 += glyph->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6360 ++glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6361 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6362
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6363 if (glyph < end
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6364 && STRINGP (glyph->object)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6365 && XSTRING (glyph->object)->intervals
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6366 && glyph->charpos >= 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6367 && glyph->charpos < XSTRING (glyph->object)->size)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6368 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6369 /* 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
6370 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
6371 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
6372 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
6373 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
6374 if (!NILP (help))
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6375 {
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6376 help_echo = help;
30302
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
6377 XSETWINDOW (help_echo_window, w);
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6378 help_echo_object = glyph->object;
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6379 help_echo_pos = glyph->charpos;
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6380 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6381
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6382 /* 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
6383 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
6384 Qlocal_map, glyph->object);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6385 if (!NILP (Fkeymapp (map)))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6386 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
6387 else
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6388 {
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6389 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
6390 Qkeymap, glyph->object);
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6391 if (!NILP (Fkeymapp (map)))
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6392 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
6393 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6394 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6395 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6396
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6397 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
6398 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6399
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6400
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6401 /* 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
6402 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
6403 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
6404 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
6405
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6406 static void
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6407 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
6408 struct frame *f;
11915
e2ab839155e1 (XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents: 11904
diff changeset
6409 int x, y;
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6410 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6411 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
6412 int portion;
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6413 Lisp_Object window;
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6414 struct window *w;
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6415
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6416 /* 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
6417 #ifdef USE_X_TOOLKIT
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6418 if (popup_activated ())
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6419 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6420 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6421
27967
7d61ff2d1530 (note_mouse_highlight): Return quickly if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 27962
diff changeset
6422 if (disable_mouse_highlight
7d61ff2d1530 (note_mouse_highlight): Return quickly if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 27962
diff changeset
6423 || !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
6424 return;
8e2379ce4fcb (fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents: 6631
diff changeset
6425
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6426 dpyinfo->mouse_face_mouse_x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6427 dpyinfo->mouse_face_mouse_y = y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6428 dpyinfo->mouse_face_mouse_frame = f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6429
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6430 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
6431 return;
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6432
6660
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
6433 if (gc_in_progress)
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
6434 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6435 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
6436 return;
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
6437 }
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
6438
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6439 /* Which window is that in? */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6440 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
6441
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6442 /* 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
6443 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
6444 clear_mouse_face (dpyinfo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6445
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6446 /* Not on a window -> return. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6447 if (!WINDOWP (window))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6448 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6449
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6450 /* Convert to window-relative pixel coordinates. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6451 w = XWINDOW (window);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6452 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
6453
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6454 /* 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
6455 buffer. */
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6456 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
6457 {
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6458 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
6459 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6460 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6461
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6462 if (portion == 1 || portion == 3)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6463 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6464 /* 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
6465 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
6466 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6467 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6468 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6469 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
6470 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
6471
6791
7036e4fd549f (dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents: 6767
diff changeset
6472 /* 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
6473 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
6474 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
6475 portion == 0
6791
7036e4fd549f (dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents: 6767
diff changeset
6476 && 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
6477 && 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
6478 && (XFASTINT (w->last_overlay_modified)
97283cd93432 (construct_menu_click, note_mouse_highlight, fast_find_position):
Karl Heuer <kwzh@gnu.org>
parents: 17316
diff changeset
6479 == 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
6480 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6481 int hpos, vpos, pos, i, area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6482 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6483
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6484 /* Find the glyph under X/Y. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6485 glyph = x_y_to_hpos_vpos (w, x, y, &hpos, &vpos, &area);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6486
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6487 /* 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
6488 if (glyph == NULL
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6489 || area != TEXT_AREA
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6490 || !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
6491 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6492 clear_mouse_face (dpyinfo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6493 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6494 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6495
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6496 pos = glyph->charpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6497 xassert (w->pseudo_window_p || BUFFERP (glyph->object));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6498
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6499 /* Check for mouse-face and help-echo. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6500 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6501 Lisp_Object mouse_face, overlay, position;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6502 Lisp_Object *overlay_vec;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6503 int len, noverlays;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6504 struct buffer *obuf;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6505 int obegv, ozv;
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 /* If we get an out-of-range value, return now; avoid an error. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6508 if (pos > BUF_Z (XBUFFER (w->buffer)))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6509 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6510
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6511 /* 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
6512 overlays_at and compute_char_face. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6513 obuf = current_buffer;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6514 current_buffer = XBUFFER (w->buffer);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6515 obegv = BEGV;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6516 ozv = ZV;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6517 BEGV = BEG;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6518 ZV = Z;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6519
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6520 /* Is this char mouse-active or does it have help-echo? */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6521 XSETINT (position, pos);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6522
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6523 /* Put all the overlays we want in a vector in overlay_vec.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6524 Store the length in len. If there are more than 10, make
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6525 enough space for all, and try again. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6526 len = 10;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6527 overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object));
30700
730f55a93973 (note_mouse_highlight): Update call to overlays_at.
Miles Bader <miles@gnu.org>
parents: 30653
diff changeset
6528 noverlays = overlays_at (pos, 0, &overlay_vec, &len, NULL, NULL, 0);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6529 if (noverlays > len)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6530 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6531 len = noverlays;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6532 overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object));
30700
730f55a93973 (note_mouse_highlight): Update call to overlays_at.
Miles Bader <miles@gnu.org>
parents: 30653
diff changeset
6533 noverlays = overlays_at (pos, 0, &overlay_vec, &len, NULL, NULL,0);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6534 }
30371
f69ecffe8453 (note_mouse_highlight): Process overlays in the right
Gerd Moellmann <gerd@gnu.org>
parents: 30369
diff changeset
6535
f69ecffe8453 (note_mouse_highlight): Process overlays in the right
Gerd Moellmann <gerd@gnu.org>
parents: 30369
diff changeset
6536 /* Sort overlays into increasing priority order. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6537 noverlays = sort_overlays (overlay_vec, noverlays, w);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6538
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6539 /* Check mouse-face highlighting. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6540 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
6541 && vpos >= dpyinfo->mouse_face_beg_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6542 && vpos <= dpyinfo->mouse_face_end_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6543 && (vpos > dpyinfo->mouse_face_beg_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6544 || hpos >= dpyinfo->mouse_face_beg_col)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6545 && (vpos < dpyinfo->mouse_face_end_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6546 || hpos < dpyinfo->mouse_face_end_col
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6547 || dpyinfo->mouse_face_past_end)))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6548 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6549 /* 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
6550 clear_mouse_face (dpyinfo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6551
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6552 /* Find the highest priority overlay that has a mouse-face prop. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6553 overlay = Qnil;
30371
f69ecffe8453 (note_mouse_highlight): Process overlays in the right
Gerd Moellmann <gerd@gnu.org>
parents: 30369
diff changeset
6554 for (i = noverlays - 1; i >= 0; --i)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6555 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6556 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
6557 if (!NILP (mouse_face))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6558 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6559 overlay = overlay_vec[i];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6560 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6561 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6562 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6563
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6564 /* 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
6565 if (NILP (overlay))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6566 mouse_face = Fget_text_property (position, Qmouse_face, w->buffer);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6567
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6568 /* Handle the overlay case. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6569 if (! NILP (overlay))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6570 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6571 /* 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
6572 should be active. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6573 Lisp_Object before, after;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6574 int ignore;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6575
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6576 before = Foverlay_start (overlay);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6577 after = Foverlay_end (overlay);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6578 /* 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
6579 fast_find_position (w, XFASTINT (before),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6580 &dpyinfo->mouse_face_beg_col,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6581 &dpyinfo->mouse_face_beg_row,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6582 &dpyinfo->mouse_face_beg_x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6583 &dpyinfo->mouse_face_beg_y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6584 dpyinfo->mouse_face_past_end
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6585 = !fast_find_position (w, XFASTINT (after),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6586 &dpyinfo->mouse_face_end_col,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6587 &dpyinfo->mouse_face_end_row,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6588 &dpyinfo->mouse_face_end_x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6589 &dpyinfo->mouse_face_end_y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6590 dpyinfo->mouse_face_window = window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6591 dpyinfo->mouse_face_face_id
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6592 = 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
6593 &ignore, pos + 1, 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6594
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6595 /* Display it as active. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6596 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
6597 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6598 /* Handle the text property case. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6599 else if (! NILP (mouse_face))
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 /* 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
6602 should be active. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6603 Lisp_Object before, after, beginning, end;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6604 int ignore;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6605
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6606 beginning = Fmarker_position (w->start);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6607 XSETINT (end, (BUF_Z (XBUFFER (w->buffer))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6608 - XFASTINT (w->window_end_pos)));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6609 before
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6610 = 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
6611 Qmouse_face,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6612 w->buffer, beginning);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6613 after
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6614 = Fnext_single_property_change (position, Qmouse_face,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6615 w->buffer, end);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6616 /* 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
6617 fast_find_position (w, XFASTINT (before),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6618 &dpyinfo->mouse_face_beg_col,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6619 &dpyinfo->mouse_face_beg_row,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6620 &dpyinfo->mouse_face_beg_x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6621 &dpyinfo->mouse_face_beg_y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6622 dpyinfo->mouse_face_past_end
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6623 = !fast_find_position (w, XFASTINT (after),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6624 &dpyinfo->mouse_face_end_col,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6625 &dpyinfo->mouse_face_end_row,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6626 &dpyinfo->mouse_face_end_x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6627 &dpyinfo->mouse_face_end_y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6628 dpyinfo->mouse_face_window = window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6629 dpyinfo->mouse_face_face_id
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6630 = 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
6631 &ignore, pos + 1, 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6632
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6633 /* Display it as active. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6634 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
6635 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6638 /* Look for a `help-echo' property. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6639 {
30369
cf4163d1218e (note_mouse_highlight): If help-echo was found in an
Gerd Moellmann <gerd@gnu.org>
parents: 30321
diff changeset
6640 Lisp_Object help, overlay;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6641
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6642 /* Check overlays first. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6643 help = Qnil;
30371
f69ecffe8453 (note_mouse_highlight): Process overlays in the right
Gerd Moellmann <gerd@gnu.org>
parents: 30369
diff changeset
6644 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
6645 {
cf4163d1218e (note_mouse_highlight): If help-echo was found in an
Gerd Moellmann <gerd@gnu.org>
parents: 30321
diff changeset
6646 overlay = overlay_vec[i];
cf4163d1218e (note_mouse_highlight): If help-echo was found in an
Gerd Moellmann <gerd@gnu.org>
parents: 30321
diff changeset
6647 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
6648 }
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6649
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6650 if (!NILP (help))
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6651 {
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6652 help_echo = help;
30302
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
6653 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
6654 help_echo_object = overlay;
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6655 help_echo_pos = pos;
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6656 }
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6657 else
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6658 {
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6659 /* Try text properties. */
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6660 if ((STRINGP (glyph->object)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6661 && glyph->charpos >= 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6662 && glyph->charpos < XSTRING (glyph->object)->size)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6663 || (BUFFERP (glyph->object)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6664 && glyph->charpos >= BEGV
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6665 && glyph->charpos < ZV))
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6666 help = Fget_text_property (make_number (glyph->charpos),
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6667 Qhelp_echo, glyph->object);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6668
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6669 if (!NILP (help))
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6670 {
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6671 help_echo = help;
30302
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
6672 help_echo_window = window;
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6673 help_echo_object = glyph->object;
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6674 help_echo_pos = glyph->charpos;
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6675 }
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
6676 }
24991
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 BEGV = obegv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6680 ZV = ozv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6681 current_buffer = obuf;
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 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6684 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6685
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6686 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6687 redo_mouse_highlight ()
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6688 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6689 if (!NILP (last_mouse_motion_frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6690 && 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
6691 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
6692 last_mouse_motion_event.x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6693 last_mouse_motion_event.y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6694 }
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
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6697
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6698 /***********************************************************************
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6699 Tool-bars
24991
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
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6702 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
6703 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
6704
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6705 /* 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
6706 or -1. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6707
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6708 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
6709
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6710
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6711 /* 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
6712 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
6713 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
6714 on a tool-bar item. Return in *PROP_IDX the index of the tool-bar
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6715 item in F->current_tool_bar_items. Value is
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6716
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6717 -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
6718 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
6719 1 otherwise. */
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6720
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6721 static int
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6722 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
6723 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6724 int x, y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6725 struct glyph **glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6726 int *hpos, *vpos, *prop_idx;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6727 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6728 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
6729 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
6730 int area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6731
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6732 /* Find the glyph under X/Y. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6733 *glyph = x_y_to_hpos_vpos (w, x, y, hpos, vpos, &area);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6734 if (*glyph == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6735 return -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6736
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6737 /* Get the start of this tool-bar item's properties in
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6738 f->current_tool_bar_items. */
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6739 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
6740 return -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6741
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6742 /* 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
6743 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
6744 && *vpos >= dpyinfo->mouse_face_beg_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6745 && *vpos <= dpyinfo->mouse_face_end_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6746 && (*vpos > dpyinfo->mouse_face_beg_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6747 || *hpos >= dpyinfo->mouse_face_beg_col)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6748 && (*vpos < dpyinfo->mouse_face_end_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6749 || *hpos < dpyinfo->mouse_face_end_col
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6750 || dpyinfo->mouse_face_past_end))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6751 return 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6752
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6753 return 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6754 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6755
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6756
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6757 /* 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
6758 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
6759 or ButtonRelase. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6760
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6761 static void
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6762 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
6763 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6764 XButtonEvent *button_event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6765 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6766 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
6767 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
6768 int hpos, vpos, prop_idx;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6769 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6770 Lisp_Object enabled_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6771 int x = button_event->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6772 int y = button_event->y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6773
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6774 /* 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
6775 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
6776 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
6777 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6778
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6779 /* If item is disabled, do nothing. */
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6780 enabled_p = (XVECTOR (f->current_tool_bar_items)
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6781 ->contents[prop_idx + TOOL_BAR_ITEM_ENABLED_P]);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6782 if (NILP (enabled_p))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6783 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6784
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6785 if (button_event->type == ButtonPress)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6786 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6787 /* Show item in pressed state. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6788 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
6789 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
6790 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
6791 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6792 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6793 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6794 Lisp_Object key, frame;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6795 struct input_event event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6796
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6797 /* Show item in released state. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6798 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
6799 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
6800
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6801 key = (XVECTOR (f->current_tool_bar_items)
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6802 ->contents[prop_idx + TOOL_BAR_ITEM_KEY]);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6803
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6804 XSETFRAME (frame, f);
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6805 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
6806 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
6807 event.arg = frame;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6808 kbd_buffer_store_event (&event);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6809
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6810 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
6811 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
6812 event.arg = key;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6813 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
6814 button_event->state);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6815 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
6816 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
6817 }
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6818 }
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6819
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6820
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6821 /* 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
6822 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
6823 note_mouse_highlight. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6824
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6825 static void
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6826 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
6827 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6828 int x, y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6829 {
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6830 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
6831 struct window *w = XWINDOW (window);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6832 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
6833 int hpos, vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6834 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6835 struct glyph_row *row;
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
6836 int i;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6837 Lisp_Object enabled_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6838 int prop_idx;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6839 enum draw_glyphs_face draw = DRAW_IMAGE_RAISED;
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
6840 int mouse_down_p, rc;
24991
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 /* 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
6843 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
6844 if (x <= 0 || y <= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6845 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6846 clear_mouse_face (dpyinfo);
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 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6849
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6850 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
6851 if (rc < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6852 {
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6853 /* Not on tool-bar item. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6854 clear_mouse_face (dpyinfo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6855 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6856 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6857 else if (rc == 0)
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6858 /* On same tool-bar item as before. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6859 goto set_help_echo;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6860
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6861 clear_mouse_face (dpyinfo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6862
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6863 /* 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
6864 mouse_down_p = (dpyinfo->grabbed
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6865 && f == last_mouse_frame
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6866 && FRAME_LIVE_P (f));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6867 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
6868 && 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
6869 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6870
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6871 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
6872 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
6873
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6874 /* If tool-bar item is not enabled, don't highlight it. */
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6875 enabled_p = (XVECTOR (f->current_tool_bar_items)
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6876 ->contents[prop_idx + TOOL_BAR_ITEM_ENABLED_P]);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6877 if (!NILP (enabled_p))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6878 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6879 /* 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
6880 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
6881 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
6882 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
6883 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
6884
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6885 /* 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
6886 dpyinfo->mouse_face_beg_col = hpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6887 dpyinfo->mouse_face_beg_row = vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6888 dpyinfo->mouse_face_beg_x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6889 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
6890 dpyinfo->mouse_face_past_end = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6891
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6892 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
6893 dpyinfo->mouse_face_end_row = vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6894 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
6895 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
6896 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
6897 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
6898
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6899 /* Display it as active. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6900 show_mouse_face (dpyinfo, draw);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6901 dpyinfo->mouse_face_image_state = draw;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6902 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6903
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6904 set_help_echo:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6905
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6906 /* 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
6907 XTread_socket does the rest. */
30302
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
6908 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
6909 help_echo_pos = -1;
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6910 help_echo = (XVECTOR (f->current_tool_bar_items)
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6911 ->contents[prop_idx + TOOL_BAR_ITEM_HELP]);
30050
ed1979c6dfb9 * xterm.c (note_mode_line_highlight, note_mouse_highlight)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30042
diff changeset
6912 if (NILP (help_echo))
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6913 help_echo = (XVECTOR (f->current_tool_bar_items)
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
6914 ->contents[prop_idx + TOOL_BAR_ITEM_CAPTION]);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6915 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6916
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6917
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6918
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6919 /* 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
6920 *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
6921 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
6922 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
6923 last line in W. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6924
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6925 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6926 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
6927 struct window *w;
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6928 int pos;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6929 int *hpos, *vpos, *x, *y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6930 {
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6931 int i;
6644
8e2379ce4fcb (fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents: 6631
diff changeset
6932 int lastcol;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6933 int maybe_next_line_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6934 int line_start_position;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6935 int yb = window_text_bottom_y (w);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6936 struct glyph_row *row = MATRIX_ROW (w->current_matrix, 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6937 struct glyph_row *best_row = row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6938 int row_vpos = 0, best_row_vpos = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6939 int current_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6940
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6941 while (row->y < yb)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6942 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6943 if (row->used[TEXT_AREA])
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6944 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
6945 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6946 line_start_position = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6947
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6948 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
6949 break;
9762
567e3670acc3 (fast_find_position): Special case if POS is end of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 9741
diff changeset
6950 /* 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
6951 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
6952 else if (line_start_position == pos
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6953 && pos == BUF_ZV (XBUFFER (w->buffer)))
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 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
6956 break;
567e3670acc3 (fast_find_position): Special case if POS is end of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 9741
diff changeset
6957 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6958 else if (line_start_position > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6959 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6960 best_row = row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6961 best_row_vpos = row_vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6962 }
28281
bd0839655485 (fast_find_position): Make sure not to consider rows
Gerd Moellmann <gerd@gnu.org>
parents: 28231
diff changeset
6963
bd0839655485 (fast_find_position): Make sure not to consider rows
Gerd Moellmann <gerd@gnu.org>
parents: 28231
diff changeset
6964 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
6965 break;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6966
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6967 ++row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6968 ++row_vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6969 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6970
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6971 /* 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
6972 lastcol = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6973 current_x = best_row->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6974 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
6975 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6976 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
6977 int charpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6978
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6979 charpos = glyph->charpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6980 if (charpos == pos)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6981 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6982 *hpos = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6983 *vpos = best_row_vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6984 *x = current_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6985 *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
6986 return 1;
8e2379ce4fcb (fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents: 6631
diff changeset
6987 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6988 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
6989 break;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6990 else if (charpos > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6991 lastcol = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6992
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6993 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
6994 }
8e2379ce4fcb (fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents: 6631
diff changeset
6995
9762
567e3670acc3 (fast_find_position): Special case if POS is end of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 9741
diff changeset
6996 /* 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
6997 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
6998 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
6999 if (maybe_next_line_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7000 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7001 ++best_row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7002 ++best_row_vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7003 lastcol = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7004 current_x = best_row->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7005 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7006
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7007 *vpos = best_row_vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7008 *hpos = lastcol + 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7009 *x = current_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7010 *y = best_row->y;
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7011 return 0;
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7012 }
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7013
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7014
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7015 /* 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
7016 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
7017
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7018 static void
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7019 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
7020 struct x_display_info *dpyinfo;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7021 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
7022 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7023 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
7024 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
7025 int i;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7026 int cursor_off_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7027 struct cursor_pos saved_cursor;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7028
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7029 saved_cursor = output_cursor;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7030
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7031 /* 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
7032 to do anything. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7033 if (w->current_matrix == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7034 goto set_x_cursor;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7035
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7036 /* 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
7037 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
7038 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
7039 goto set_x_cursor;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7040
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7041 set_output_cursor (&w->phys_cursor);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7042
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7043 /* 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
7044 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
7045 i <= dpyinfo->mouse_face_end_row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7046 i++)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7047 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7048 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
7049 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
7050
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7051 /* 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
7052 if (!row->enabled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7053 continue;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7054
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7055 /* 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
7056 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
7057 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7058 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
7059 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
7060 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7061 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7062 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7063 start_hpos = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7064 start_x = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7065 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7066
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7067 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
7068 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
7069 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7070 end_hpos = row->used[TEXT_AREA];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7071
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7072 /* 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
7073 cursor off. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7074 if (!w->pseudo_window_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7075 && i == output_cursor.vpos
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7076 && output_cursor.hpos >= start_hpos - 1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7077 && output_cursor.hpos <= end_hpos)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7078 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7079 x_update_window_cursor (w, 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7080 cursor_off_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7081 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7082
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7083 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
7084 {
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
7085 row->mouse_face_p = draw == DRAW_MOUSE_FACE;
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
7086 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
7087 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
7088 }
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7089 }
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7090
6660
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
7091 /* 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
7092 if (cursor_off_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7093 x_display_cursor (w, 1,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7094 output_cursor.hpos, output_cursor.vpos,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7095 output_cursor.x, output_cursor.y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7096
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7097 output_cursor = saved_cursor;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7098
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7099 set_x_cursor:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7100
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7101 /* Change the mouse cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7102 if (draw == DRAW_NORMAL_TEXT)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7103 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
7104 f->output_data.x->text_cursor);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7105 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
7106 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
7107 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
7108 else
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
7109 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
7110 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
7111 }
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7112
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7113 /* 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
7114 Redraw it un-highlighted first. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7115
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7116 void
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7117 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
7118 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
7119 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7120 if (tip_frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7121 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7122
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7123 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
7124 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
7125
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7126 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
7127 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
7128 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
7129 }
16491
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7130
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7131
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7132 /* 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
7133 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
7134 functions to ensure the mouse-highlight is off. */
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7135
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7136 static void
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7137 x_clear_mouse_face (w)
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7138 struct window *w;
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7139 {
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7140 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
7141 Lisp_Object window;
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7142
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7143 XSETWINDOW (window, w);
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7144 if (EQ (window, dpyinfo->mouse_face_window))
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7145 clear_mouse_face (dpyinfo);
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7146 }
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7147
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
7148
16491
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7149 /* 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
7150 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
7151
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
7152 void
16491
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7153 cancel_mouse_face (f)
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7154 FRAME_PTR f;
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7155 {
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7156 Lisp_Object window;
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7157 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
7158
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7159 window = dpyinfo->mouse_face_window;
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7160 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
7161 {
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7162 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
7163 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
7164 dpyinfo->mouse_face_window = Qnil;
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7165 }
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
7166 }
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
7167
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7168 static struct scroll_bar *x_window_to_scroll_bar ();
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7169 static void x_scroll_bar_report_motion ();
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7170
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7171 /* Return the current position of the mouse.
11436
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
7172 *fp should be a frame which indicates which display to ask about.
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
7173
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
7174 If the mouse movement started in a scroll bar, set *fp, *bar_window,
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7175 and *part to the frame, window, and scroll bar part that the mouse
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7176 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
7177 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
7178
11436
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
7179 If the mouse movement started elsewhere, set *fp to the frame the
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7180 mouse is on, *bar_window to nil, and *x and *y to the character cell
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7181 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
7182
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7183 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
7184 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
7185
3669
fd4187a96445 (XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents: 3639
diff changeset
7186 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
7187
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7188 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
7189 movement. */
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7190
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7191 static void
11122
ce63fb361ae9 (XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents: 11015
diff changeset
7192 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
7193 FRAME_PTR *fp;
11122
ce63fb361ae9 (XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents: 11015
diff changeset
7194 int insist;
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7195 Lisp_Object *bar_window;
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7196 enum scroll_bar_part *part;
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7197 Lisp_Object *x, *y;
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
7198 unsigned long *time;
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7199 {
3669
fd4187a96445 (XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents: 3639
diff changeset
7200 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
7201
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7202 BLOCK_INPUT;
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7203
20180
bfbf6a2939a3 (XTmouse_position): Handle INSIST < 0.
Karl Heuer <kwzh@gnu.org>
parents: 19447
diff changeset
7204 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
7205 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
7206 else
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7207 {
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7208 Window root;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7209 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
7210
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7211 Window dummy_window;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7212 int dummy;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7213
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
7214 Lisp_Object frame, tail;
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
7215
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
7216 /* 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
7217 FOR_EACH_FRAME (tail, frame)
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
7218 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
7219 XFRAME (frame)->mouse_moved = 0;
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
7220
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7221 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
7222
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7223 /* 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
7224 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
7225 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
7226
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7227 /* 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
7228 &root,
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7229
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7230 /* 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
7231 a different screen. */
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7232 &dummy_window,
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7233
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7234 /* The position on that root window. */
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
7235 &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
7236
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7237 /* 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
7238 &dummy, &dummy,
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7239
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7240 /* 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
7241 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
7242 (unsigned int *) &dummy);
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7243
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7244 /* 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
7245 containing the pointer. */
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7246 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7247 Window win, child;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7248 int win_x, win_y;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7249 int parent_x = 0, parent_y = 0;
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7250 int count;
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7251
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7252 win = root;
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7253
11436
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
7254 /* 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
7255 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
7256 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
7257
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7258 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
7259
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
7260 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
7261 && 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
7262 {
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7263 /* 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
7264 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
7265 XTranslateCoordinates (FRAME_X_DISPLAY (*fp),
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7266
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7267 /* From-window, to-window. */
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7268 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
7269
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7270 /* 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
7271 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
7272
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7273 /* Child of win. */
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7274 &child);
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7275 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
7276 }
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7277 else
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7278 {
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7279 while (1)
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7280 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
7281 XTranslateCoordinates (FRAME_X_DISPLAY (*fp),
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7282
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7283 /* From-window, to-window. */
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7284 root, win,
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7285
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7286 /* From-position, to-position. */
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7287 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
7288
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7289 /* Child of win. */
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7290 &child);
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7291
13627
8873aa3451dd (XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents: 13598
diff changeset
7292 if (child == None || child == win)
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7293 break;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7294
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7295 win = child;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7296 parent_x = win_x;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7297 parent_y = win_y;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7298 }
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7299
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7300 /* Now we know that:
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7301 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
7302 (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
7303 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
7304 (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
7305 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
7306 (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
7307 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
7308 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
7309 never use them in that case.) */
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7310
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7311 /* 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
7312 f1 = x_any_window_to_frame (FRAME_X_DISPLAY_INFO (*fp), win);
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
7313 }
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
7314
11436
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
7315 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
7316 f1 = 0;
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
7317
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7318 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
7319
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7320 /* 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
7321 if (! f1)
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7322 {
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7323 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
7324
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7325 if (bar)
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7326 {
3669
fd4187a96445 (XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents: 3639
diff changeset
7327 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
7328 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
7329 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
7330 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7331 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7332
20180
bfbf6a2939a3 (XTmouse_position): Handle INSIST < 0.
Karl Heuer <kwzh@gnu.org>
parents: 19447
diff changeset
7333 if (f1 == 0 && insist > 0)
25682
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
7334 f1 = SELECTED_FRAME ();
11122
ce63fb361ae9 (XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents: 11015
diff changeset
7335
3669
fd4187a96445 (XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents: 3639
diff changeset
7336 if (f1)
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7337 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7338 /* 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
7339 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
7340 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
7341 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
7342 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
7343 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
7344 the frame are divided into. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7345
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7346 #if OLD_REDISPLAY_CODE
6055
a9f61727a90c (construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents: 6023
diff changeset
7347 int ignore1, ignore2;
a9f61727a90c (construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents: 6023
diff changeset
7348 pixel_to_glyph_coords (f1, win_x, win_y, &ignore1, &ignore2,
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
7349 &last_mouse_glyph,
11122
ce63fb361ae9 (XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents: 11015
diff changeset
7350 FRAME_X_DISPLAY_INFO (f1)->grabbed
ce63fb361ae9 (XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents: 11015
diff changeset
7351 || insist);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7352 #else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7353 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7354 int width = FRAME_SMALLEST_CHAR_WIDTH (f1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7355 int height = FRAME_SMALLEST_FONT_HEIGHT (f1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7356 int x = win_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7357 int y = win_y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7358
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7359 /* Arrange for the division in PIXEL_TO_CHAR_COL etc. to
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7360 round down even for negative values. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7361 if (x < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7362 x -= width - 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7363 if (y < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7364 y -= height - 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7365
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7366 last_mouse_glyph.width = width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7367 last_mouse_glyph.height = height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7368 last_mouse_glyph.x = (x + width - 1) / width * width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7369 last_mouse_glyph.y = (y + height - 1) / height * height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7370 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7371 #endif
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7372
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7373 *bar_window = Qnil;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7374 *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
7375 *fp = f1;
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
7376 XSETINT (*x, win_x);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
7377 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
7378 *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
7379 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7380 }
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7381 }
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7382
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7383 UNBLOCK_INPUT;
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7384 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7385
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7386
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7387 #ifdef USE_X_TOOLKIT
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7388
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7389 /* 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
7390 Xt timeouts, if needed. We must avoid calling XtAppPending as
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7391 much as possible because that function does an implicit XFlush
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7392 that slows us down. */
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7393
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7394 static void
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7395 x_process_timeouts (timer)
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7396 struct atimer *timer;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7397 {
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7398 if (toolkit_scroll_bar_interaction || popup_activated_flag)
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7399 {
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7400 BLOCK_INPUT;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7401 while (XtAppPending (Xt_app_con) & XtIMTimer)
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7402 XtAppProcessEvent (Xt_app_con, XtIMTimer);
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7403 UNBLOCK_INPUT;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7404 }
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7405 }
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7406
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7407 #endif /* USE_X_TOOLKIT */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7408
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
7409
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7410 /* Scroll bar support. */
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7411
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7412 /* 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
7413 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
7414 bits. */
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7415
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7416 static struct scroll_bar *
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7417 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
7418 Window window_id;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7419 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7420 Lisp_Object tail;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7421
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7422 for (tail = Vframe_list;
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7423 XGCTYPE (tail) == Lisp_Cons;
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
7424 tail = XCDR (tail))
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7425 {
6521
a975c5944916 (x_window_to_scroll_bar, x_new_font): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6413
diff changeset
7426 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
7427
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
7428 frame = XCAR (tail);
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7429 /* 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
7430 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
7431 abort ();
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7432
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7433 /* 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
7434 right window ID. */
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7435 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
7436 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
7437 /* 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
7438 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
7439 ! GC_NILP (bar) || (bar = condemned,
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7440 condemned = Qnil,
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7441 ! 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
7442 bar = XSCROLL_BAR (bar)->next)
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7443 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
7444 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
7445 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7446
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7447 return 0;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7448 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7449
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7450
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7451
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7452 /************************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7453 Toolkit scroll bars
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7454 ************************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7455
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7456 #if USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7457
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7458 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
7459 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
7460 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
7461 struct scroll_bar *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7462 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
7463 int, int, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7464
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7465
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7466 /* 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
7467
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7468 static XtActionHookId action_hook_id;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7469
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7470 /* 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
7471 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
7472
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7473 static Lisp_Object window_being_scrolled;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7474
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7475 /* 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
7476
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7477 static int last_scroll_bar_part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7478
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7479 /* 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
7480 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
7481
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7482 static Boolean xaw3d_arrow_scroll;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7483
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7484 /* 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
7485 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
7486 to avoid jerkyness. */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7487
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7488 static Boolean xaw3d_pick_top;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7489
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7490
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7491 /* 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
7492 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
7493 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
7494 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
7495
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7496 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7497 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
7498 num_params)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7499 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7500 XtPointer client_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7501 String action_name;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7502 XEvent *event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7503 String *params;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7504 Cardinal *num_params;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7505 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7506 int scroll_bar_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7507 char *end_action;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7508
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7509 #ifdef USE_MOTIF
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7510 scroll_bar_p = XmIsScrollBar (widget);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7511 end_action = "Release";
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7512 #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
7513 scroll_bar_p = XtIsSubclass (widget, scrollbarWidgetClass);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7514 end_action = "EndScroll";
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7515 #endif /* USE_MOTIF */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7516
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7517 if (scroll_bar_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7518 && strcmp (action_name, end_action) == 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7519 && WINDOWP (window_being_scrolled))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7520 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7521 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7522
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7523 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
7524 scroll_bar_end_scroll, 0, 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7525 w = XWINDOW (window_being_scrolled);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7526 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
7527 window_being_scrolled = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7528 last_scroll_bar_part = -1;
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7529
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7530 /* Xt timeouts no longer needed. */
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7531 toolkit_scroll_bar_interaction = 0;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7532 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7533 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7534
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7535
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7536 /* 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
7537 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
7538 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
7539 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
7540
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7541 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7542 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
7543 Lisp_Object window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7544 int part, portion, whole;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7545 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7546 XEvent event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7547 XClientMessageEvent *ev = (XClientMessageEvent *) &event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7548 struct frame *f = XFRAME (XWINDOW (window)->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7549
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7550 /* 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
7551 ev->type = ClientMessage;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7552 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
7553 ev->display = FRAME_X_DISPLAY (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7554 ev->window = FRAME_X_WINDOW (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7555 ev->format = 32;
29717
acaa36b47f50 fix up more Lisp_Object/int conversion issues
Ken Raeburn <raeburn@raeburn.org>
parents: 29619
diff changeset
7556 ev->data.l[0] = (long) XFASTINT (window);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7557 ev->data.l[1] = (long) part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7558 ev->data.l[2] = (long) 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7559 ev->data.l[3] = (long) portion;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7560 ev->data.l[4] = (long) whole;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7561
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7562 /* Make Xt timeouts work while the scroll bar is active. */
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7563 toolkit_scroll_bar_interaction = 1;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
7564
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7565 /* 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
7566 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
7567 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
7568 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7569 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
7570 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7571 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7572
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7573
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7574 /* 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
7575 in *IEVENT. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7576
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7577 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7578 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
7579 XEvent *event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7580 struct input_event *ievent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7581 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7582 XClientMessageEvent *ev = (XClientMessageEvent *) event;
29717
acaa36b47f50 fix up more Lisp_Object/int conversion issues
Ken Raeburn <raeburn@raeburn.org>
parents: 29619
diff changeset
7583 Lisp_Object window;
acaa36b47f50 fix up more Lisp_Object/int conversion issues
Ken Raeburn <raeburn@raeburn.org>
parents: 29619
diff changeset
7584 struct frame *f;
acaa36b47f50 fix up more Lisp_Object/int conversion issues
Ken Raeburn <raeburn@raeburn.org>
parents: 29619
diff changeset
7585
acaa36b47f50 fix up more Lisp_Object/int conversion issues
Ken Raeburn <raeburn@raeburn.org>
parents: 29619
diff changeset
7586 XSETFASTINT (window, ev->data.l[0]);
acaa36b47f50 fix up more Lisp_Object/int conversion issues
Ken Raeburn <raeburn@raeburn.org>
parents: 29619
diff changeset
7587 f = XFRAME (XWINDOW (window)->frame);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7588
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7589 ievent->kind = scroll_bar_click;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7590 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
7591 ievent->arg = Qnil;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7592 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
7593 ievent->part = ev->data.l[1];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7594 ievent->code = ev->data.l[2];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7595 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
7596 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
7597 ievent->modifiers = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7598 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7599
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 #ifdef USE_MOTIF
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7602
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7603 /* 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
7604
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7605 #define XM_SB_MIN 1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7606 #define XM_SB_MAX 10000000
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7607 #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
7608
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7609
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7610 /* 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
7611 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
7612 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
7613
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7614 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7615 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
7616 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7617 XtPointer client_data, call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7618 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7619 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
7620 XmScrollBarCallbackStruct *cs = (XmScrollBarCallbackStruct *) call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7621 double percent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7622 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
7623
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7624 switch (cs->reason)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7625 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7626 case XmCR_DECREMENT:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7627 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7628 part = scroll_bar_up_arrow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7629 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7630
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7631 case XmCR_INCREMENT:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7632 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7633 part = scroll_bar_down_arrow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7634 break;
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 case XmCR_PAGE_DECREMENT:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7637 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7638 part = scroll_bar_above_handle;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7639 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7640
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7641 case XmCR_PAGE_INCREMENT:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7642 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7643 part = scroll_bar_below_handle;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7644 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7645
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7646 case XmCR_TO_TOP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7647 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7648 part = scroll_bar_to_top;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7649 break;
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 case XmCR_TO_BOTTOM:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7652 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7653 part = scroll_bar_to_bottom;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7654 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7655
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7656 case XmCR_DRAG:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7657 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7658 int slider_size;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7659 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
7660 && XINT (bar->dragging) <= cs->value);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7661
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7662 /* Get the slider size. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7663 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7664 XtVaGetValues (widget, XmNsliderSize, &slider_size, NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7665 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7666
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7667 /* At the max position of the scroll bar, do a line-wise
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7668 movement. Without doing anything, the LessTif scroll bar
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7669 calls us with the same cs->value again and again. If we
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7670 want to make sure that we can reach the end of the buffer,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7671 we have to do something.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7672
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7673 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
7674 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
7675 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
7676 a better slider behavior. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7677
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7678 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
7679 || (dragging_down_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7680 && 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
7681 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7682 part = scroll_bar_down_arrow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7683 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7684 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7685 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7686 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7687 whole = XM_SB_RANGE;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7688 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
7689 part = scroll_bar_handle;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7690 bar->dragging = make_number (cs->value);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7691 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7692 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7693 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7694
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7695 case XmCR_VALUE_CHANGED:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7696 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7697 };
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7698
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7699 if (part >= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7700 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7701 window_being_scrolled = bar->window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7702 last_scroll_bar_part = part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7703 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
7704 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7705 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7706
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7707
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7708 #else /* !USE_MOTIF, i.e. Xaw. */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7709
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7710
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7711 /* 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
7712 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
7713 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
7714 the thumb is. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7715
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7716 static void
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7717 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
7718 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7719 XtPointer client_data, call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7720 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7721 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
7722 float top = *(float *) call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7723 float shown;
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7724 int whole, portion, height;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7725 int part;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7726
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7727 /* 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
7728 BLOCK_INPUT;
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7729 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
7730 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7731
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7732 whole = 10000000;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7733 portion = shown < 1 ? top * whole : 0;
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7734
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7735 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
7736 /* 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
7737 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
7738 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
7739 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
7740 bottom). */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7741 part = scroll_bar_down_arrow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7742 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7743 part = scroll_bar_handle;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7744
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7745 window_being_scrolled = bar->window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7746 bar->dragging = make_number (portion);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7747 last_scroll_bar_part = part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7748 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
7749 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7750
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7751
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7752 /* 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
7753 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
7754 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
7755 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
7756 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
7757 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
7758 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
7759
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7760 static void
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7761 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
7762 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7763 XtPointer client_data, call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7764 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7765 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
7766 int position = (int) call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7767 Dimension height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7768 int part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7769
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7770 /* 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
7771 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7772 XtVaGetValues (widget, XtNheight, &height, NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7773 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7774
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7775 if (abs (position) >= height)
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7776 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
7777
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7778 /* If Xaw3d was compiled with ARROW_SCROLLBAR,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7779 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
7780 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
7781 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
7782 else
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7783 part = scroll_bar_move_ratio;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7784
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7785 window_being_scrolled = bar->window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7786 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7787 last_scroll_bar_part = part;
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7788 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
7789 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7790
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7791
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7792 #endif /* not USE_MOTIF */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7793
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7794
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7795 /* 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
7796 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
7797
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7798 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7799 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
7800 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7801 struct scroll_bar *bar;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7802 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7803 Window xwindow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7804 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7805 Arg av[20];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7806 int ac = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7807 char *scroll_bar_name = "verticalScrollBar";
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7808 unsigned long pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7809
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7810 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7811
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7812 #ifdef USE_MOTIF
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7813 /* LessTif 0.85, problems:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7814
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7815 1. When the mouse if over the scroll bar, the scroll bar will
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7816 get keyboard events. I didn't find a way to turn this off.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7817
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7818 2. Do we have to explicitly set the cursor to get an arrow
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7819 cursor (see below)? */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7820
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7821 /* Set resources. Create the widget. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7822 XtSetArg (av[ac], XtNmappedWhenManaged, False); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7823 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
7824 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
7825 XtSetArg (av[ac], XmNorientation, XmVERTICAL); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7826 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
7827 XtSetArg (av[ac], XmNincrement, 1); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7828 XtSetArg (av[ac], XmNpageIncrement, 1); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7829
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7830 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
7831 if (pixel != -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7832 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7833 XtSetArg (av[ac], XmNforeground, pixel);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7834 ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7835 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7836
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7837 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
7838 if (pixel != -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7839 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7840 XtSetArg (av[ac], XmNbackground, pixel);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7841 ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7842 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7843
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7844 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
7845 scroll_bar_name, av, ac);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7846
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7847 /* 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
7848 XtAddCallback (widget, XmNdecrementCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7849 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7850 XtAddCallback (widget, XmNdragCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7851 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7852 XtAddCallback (widget, XmNincrementCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7853 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7854 XtAddCallback (widget, XmNpageDecrementCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7855 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7856 XtAddCallback (widget, XmNpageIncrementCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7857 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7858 XtAddCallback (widget, XmNtoBottomCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7859 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7860 XtAddCallback (widget, XmNtoTopCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7861 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7862
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7863 /* 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
7864 XtRealizeWidget (widget);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7865
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7866 /* 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
7867 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
7868 XDefineCursor (XtDisplay (widget), XtWindow (widget),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7869 f->output_data.x->nontext_cursor);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7870
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7871 #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
7872
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7873 /* 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
7874 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
7875 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
7876 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
7877 XtSetArg (av[ac], XtNmappedWhenManaged, False); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7878 XtSetArg (av[ac], XtNorientation, XtorientVertical); ++ac;
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7879 /* For smoother scrolling with Xaw3d -sm */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7880 /* XtSetArg (av[ac], XtNpickTop, True); ++ac; */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7881 /* 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
7882
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7883 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
7884 if (pixel != -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7885 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7886 XtSetArg (av[ac], XtNforeground, pixel);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7887 ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7888 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7889
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7890 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
7891 if (pixel != -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7892 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7893 XtSetArg (av[ac], XtNbackground, pixel);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7894 ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7895 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7896
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7897 widget = XtCreateWidget (scroll_bar_name, scrollbarWidgetClass,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7898 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
7899
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7900 {
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7901 char *initial = "";
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7902 char *val = initial;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7903 XtVaGetValues (widget, XtNscrollVCursor, (XtPointer) &val,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7904 XtNpickTop, (XtPointer) &xaw3d_pick_top, NULL);
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7905 if (val == initial)
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7906 { /* ARROW_SCROLL */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7907 xaw3d_arrow_scroll = True;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7908 /* 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
7909 XtVaSetValues (widget, XtNcursorName, "top_left_arrow", NULL);
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7910 }
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7911 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7912
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7913 /* Define callbacks. */
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7914 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
7915 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
7916 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7917
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7918 /* 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
7919 XtRealizeWidget (widget);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7920
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7921 #endif /* !USE_MOTIF */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7922
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7923 /* 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
7924 finishes interacting with a scroll bar. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7925 if (action_hook_id == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7926 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
7927
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7928 /* 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
7929 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
7930 xwindow = XtWindow (widget);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7931 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
7932
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7933 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7934 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7935
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7936
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7937 /* 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
7938 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
7939
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7940 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7941 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
7942 struct scroll_bar *bar;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7943 int portion, position, whole;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7944 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7945 float top, shown;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7946 Widget widget = SCROLL_BAR_X_WIDGET (bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7947
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7948 if (whole == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7949 top = 0, shown = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7950 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7951 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7952 top = (float) position / whole;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7953 shown = (float) portion / whole;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7954 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7955
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7956 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7957
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7958 #ifdef USE_MOTIF
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7959 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7960 int size, value;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7961 Boolean arrow1_selected, arrow2_selected;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7962 unsigned char flags;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7963 XmScrollBarWidget sb;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7964
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
7965 /* 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
7966 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
7967 value. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7968 size = shown * XM_SB_RANGE;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7969 size = min (size, XM_SB_RANGE);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7970 size = max (size, 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7971
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7972 /* 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
7973 value = top * XM_SB_RANGE;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7974 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
7975 value = max (value, XM_SB_MIN);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7976
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7977 /* LessTif: Calling XmScrollBarSetValues after an increment or
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7978 decrement turns off auto-repeat LessTif-internally. This can
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7979 be seen in ScrollBar.c which resets Arrow1Selected and
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7980 Arrow2Selected. It also sets internal flags so that LessTif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7981 believes the mouse is in the slider. We either have to change
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7982 our code, or work around that by accessing private data. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7983
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7984 sb = (XmScrollBarWidget) widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7985 arrow1_selected = sb->scrollBar.arrow1_selected;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7986 arrow2_selected = sb->scrollBar.arrow2_selected;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7987 flags = sb->scrollBar.flags;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7988
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7989 if (NILP (bar->dragging))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7990 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
7991 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
7992 /* 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
7993 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
7994 page-wise movement. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7995 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
7996 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7997 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7998 /* 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
7999 This reduces flicker effects. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8000 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
8001
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8002 XmScrollBarGetValues (widget, &old_value, &old_size,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8003 &increment, &page_increment);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8004 XmScrollBarSetValues (widget, old_value,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8005 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
8006 0, 0, False);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8007 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8008
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8009 sb->scrollBar.arrow1_selected = arrow1_selected;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8010 sb->scrollBar.arrow2_selected = arrow2_selected;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8011 sb->scrollBar.flags = flags;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8012 }
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8013 #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
8014 {
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8015 float old_top, old_shown;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8016 Dimension height;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8017 XtVaGetValues (widget,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8018 XtNtopOfThumb, &old_top,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8019 XtNshown, &old_shown,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8020 XtNheight, &height,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8021 NULL);
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8022
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8023 /* Massage the top+shown values. */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8024 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
8025 top = max (0, min (1, top));
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8026 else
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8027 top = old_top;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8028 /* 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
8029 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
8030
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8031 /* 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
8032 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
8033 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
8034 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
8035 {
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8036 if (NILP (bar->dragging))
25101
6b42357f28f9 (x_set_toolkit_scroll_bar_thumb): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents: 25091
diff changeset
8037 XawScrollbarSetThumb (widget, top, shown);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8038 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8039 {
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8040 #ifdef HAVE_XAW3D
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8041 ScrollbarWidget sb = (ScrollbarWidget) widget;
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
8042 int scroll_mode = 0;
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8043
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8044 /* `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
8045 if (xaw3d_arrow_scroll)
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8046 {
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8047 /* Xaw3d stupidly ignores resize requests while dragging
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8048 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
8049 scroll_mode = sb->scrollbar.scroll_mode;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8050 if (scroll_mode == 2)
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8051 sb->scrollbar.scroll_mode = 0;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8052 }
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8053 #endif
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8054 /* 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
8055 if (!xaw3d_pick_top)
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8056 shown = min (shown, old_shown);
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8057
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8058 XawScrollbarSetThumb (widget, top, shown);
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8059
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8060 #ifdef HAVE_XAW3D
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8061 if (xaw3d_arrow_scroll && scroll_mode == 2)
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8062 sb->scrollbar.scroll_mode = scroll_mode;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8063 #endif
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8064 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8065 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8066 }
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
8067 #endif /* !USE_MOTIF */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8068
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8069 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8070 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8071
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8072 #endif /* USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8073
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8074
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8075
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 Scroll bars, general
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8080 /* 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
8081 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
8082 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
8083 scroll bar. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8084
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8085 static struct scroll_bar *
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8086 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
8087 struct window *w;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8088 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
8089 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8090 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
8091 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
8092 = 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
8093
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8094 BLOCK_INPUT;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8095
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8096 #if USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8097 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
8098 #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
8099 {
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8100 XSetWindowAttributes a;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8101 unsigned long mask;
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8102 Window window;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8103
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8104 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
8105 if (a.background_pixel == -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8106 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
8107
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8108 a.event_mask = (ButtonPressMask | ButtonReleaseMask
1793
cf4c3f01ddb9 * xterm.c (x_scrollbar_create): Include PointerMotionHintMask in
Jim Blandy <jimb@redhat.com>
parents: 1787
diff changeset
8109 | ButtonMotionMask | PointerMotionHintMask
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8110 | ExposureMask);
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8111 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
8112
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8113 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
8114
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8115 /* 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
8116 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
8117 this case, no clear_frame is generated to reduce flickering. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8118 XClearArea (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8119 left, top, width,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8120 window_box_height (w), False);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8121
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8122 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
8123 /* Position and size of scroll bar. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8124 left + VERTICAL_SCROLL_BAR_WIDTH_TRIM,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8125 top,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8126 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
8127 height,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8128 /* Border width, depth, class, and visual. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8129 0,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8130 CopyFromParent,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8131 CopyFromParent,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8132 CopyFromParent,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8133 /* Attributes. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8134 mask, &a);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8135 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
8136 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8137 #endif /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8138
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8139 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
8140 XSETINT (bar->top, top);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8141 XSETINT (bar->left, left);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8142 XSETINT (bar->width, width);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8143 XSETINT (bar->height, height);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8144 XSETINT (bar->start, 0);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8145 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
8146 bar->dragging = Qnil;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8147
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8148 /* 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
8149 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
8150 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
8151 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
8152 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
8153 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
8154
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8155 /* Map the window/widget. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8156 #if USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8157 XtMapWidget (SCROLL_BAR_X_WIDGET (bar));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8158 XtConfigureWidget (SCROLL_BAR_X_WIDGET (bar),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8159 left + VERTICAL_SCROLL_BAR_WIDTH_TRIM,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8160 top,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8161 width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8162 height, 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8163 #else /* not USE_TOOLKIT_SCROLL_BARS */
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
8164 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
8165 #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
8166
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8167 UNBLOCK_INPUT;
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8168 return bar;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8169 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8170
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8171
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8172 /* 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
8173
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8174 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
8175 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
8176 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
8177 events.)
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8178
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8179 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
8180 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
8181 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
8182 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
8183 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
8184
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8185 #ifndef USE_TOOLKIT_SCROLL_BARS
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8186
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8187 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8188 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
8189 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
8190 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
8191 int rebuild;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8192 {
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8193 int dragging = ! NILP (bar->dragging);
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8194 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
8195 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
8196 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
8197
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8198 /* 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
8199 if (! rebuild
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8200 && 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
8201 && 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
8202 return;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8203
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8204 BLOCK_INPUT;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8205
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8206 {
16251
ec1b1ae37295 Pass frame arg in calls to VERTICAL_SCROLL_BAR_INSIDE_HEIGHT
Richard M. Stallman <rms@gnu.org>
parents: 16220
diff changeset
8207 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
8208 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
8209 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
8210
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8211 /* 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
8212 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
8213 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8214 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
8215
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8216 if (start < 0)
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8217 start = 0;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8218 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
8219 start = top_range;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8220 end = start + length;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8221
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8222 if (end < start)
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8223 end = start;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8224 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
8225 end = top_range;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8226 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8227
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8228 /* 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
8229 XSETINT (bar->start, start);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8230 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
8231
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8232 /* 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
8233 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
8234 end = top_range;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8235
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8236 /* 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
8237 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
8238 that many pixels tall. */
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8239 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
8240
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8241 /* 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
8242 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
8243 if (0 < start)
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
8244 XClearArea (FRAME_X_DISPLAY (f), w,
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8245
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8246 /* x, y, width, height, and exposures. */
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8247 VERTICAL_SCROLL_BAR_LEFT_BORDER,
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8248 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
8249 inside_width, start,
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8250 False);
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8251
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8252 /* 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
8253 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
8254 XSetForeground (FRAME_X_DISPLAY (f), gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8255 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
8256
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8257 /* 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
8258 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
8259
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8260 /* x, y, width, height */
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8261 VERTICAL_SCROLL_BAR_LEFT_BORDER,
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8262 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
8263 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
8264
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8265 /* 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
8266 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
8267 XSetForeground (FRAME_X_DISPLAY (f), gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8268 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
8269
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8270 /* 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
8271 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
8272 if (end < inside_height)
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
8273 XClearArea (FRAME_X_DISPLAY (f), w,
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8274
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8275 /* x, y, width, height, and exposures. */
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8276 VERTICAL_SCROLL_BAR_LEFT_BORDER,
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8277 VERTICAL_SCROLL_BAR_TOP_BORDER + end,
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8278 inside_width, inside_height - end,
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8279 False);
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8280
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8281 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8282
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8283 UNBLOCK_INPUT;
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8284 }
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8285
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8286 #endif /* !USE_TOOLKIT_SCROLL_BARS */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8287
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8288 /* 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
8289 nil. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8290
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8291 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8292 x_scroll_bar_remove (bar)
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8293 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
8294 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8295 BLOCK_INPUT;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8296
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8297 #if USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8298 XtDestroyWidget (SCROLL_BAR_X_WIDGET (bar));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8299 #else /* not USE_TOOLKIT_SCROLL_BARS */
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8300 {
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8301 FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window)));
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8302 XDestroyWindow (FRAME_X_DISPLAY (f), SCROLL_BAR_X_WINDOW (bar));
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8303 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8304 #endif /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8305
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8306 /* 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
8307 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
8308
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8309 UNBLOCK_INPUT;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8310 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8311
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8312
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8313 /* 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
8314 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
8315 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
8316 create one. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8317
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8318 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8319 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
8320 struct window *w;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8321 int portion, whole, position;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8322 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8323 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
8324 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
8325 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
8326 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
8327
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8328 /* Get window dimensions. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8329 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
8330 top = window_y;
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8331 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
8332 height = window_height;
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8333
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8334 /* 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
8335 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
8336 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
8337 else
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8338 left = XFASTINT (w->left);
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8339 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
8340 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
8341
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8342 /* 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
8343 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
8344 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
8345 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
8346 else
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8347 sb_width = width;
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8348
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8349 /* 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
8350 #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
8351 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
8352 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
8353 else
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8354 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
8355 #else
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8356 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
8357 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
8358 else
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8359 sb_left = left;
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8360 #endif
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8361
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8362 /* 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
8363 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
8364 {
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
8365 BLOCK_INPUT;
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8366 XClearArea (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8367 left, top, width, height, False);
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
8368 UNBLOCK_INPUT;
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8369 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
8370 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8371 else
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8372 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8373 /* 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
8374 unsigned int mask = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8375
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8376 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
8377
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8378 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8379
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8380 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
8381 mask |= CWX;
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8382 if (top != XINT (bar->top))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8383 mask |= CWY;
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8384 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
8385 mask |= CWWidth;
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8386 if (height != XINT (bar->height))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8387 mask |= CWHeight;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8388
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8389 #ifdef USE_TOOLKIT_SCROLL_BARS
25269
621067279f19 (XTset_vertical_scroll_bar) [USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 25191
diff changeset
8390
621067279f19 (XTset_vertical_scroll_bar) [USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 25191
diff changeset
8391 /* 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
8392 for them on the frame, we have to clear "under" them. */
621067279f19 (XTset_vertical_scroll_bar) [USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 25191
diff changeset
8393 XClearArea (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8394 left, top, width, height, False);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8395
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8396 /* Move/size the scroll bar widget. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8397 if (mask)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8398 XtConfigureWidget (SCROLL_BAR_X_WIDGET (bar),
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8399 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
8400 top,
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8401 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
8402 height, 0);
24991
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 #else /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8405
25633
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
8406 if (VERTICAL_SCROLL_BAR_WIDTH_TRIM)
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
8407 {
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
8408 /* Clear areas not covered by the scroll bar. This makes sure a
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
8409 previous mode line display is cleared after C-x 2 C-x 1, for
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
8410 example. Non-toolkit scroll bars are as wide as the area
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
8411 reserved for scroll bars - trim at both sides. */
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
8412 XClearArea (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
8413 left, top, VERTICAL_SCROLL_BAR_WIDTH_TRIM,
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
8414 height, False);
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
8415 XClearArea (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
8416 left + width - VERTICAL_SCROLL_BAR_WIDTH_TRIM,
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
8417 top, VERTICAL_SCROLL_BAR_WIDTH_TRIM,
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
8418 height, False);
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
8419 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8420
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8421 /* Move/size the scroll bar window. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8422 if (mask)
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 XWindowChanges wc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8425
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8426 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
8427 wc.y = top;
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8428 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
8429 wc.height = height;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8430 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
8431 mask, &wc);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8432 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8433
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8434 #endif /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8435
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8436 /* Remember new settings. */
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8437 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
8438 XSETINT (bar->top, top);
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
8439 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
8440 XSETINT (bar->height, height);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8441
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8442 UNBLOCK_INPUT;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8445 #if USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8446 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
8447 #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
8448 /* 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
8449 dragged. */
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8450 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
8451 {
25541
be975dcf4a0c (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 25529
diff changeset
8452 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
8453
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8454 if (whole == 0)
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8455 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
8456 else
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8457 {
3686
910ea1d66bfd * xterm.c (XTset_vertical_scroll_bar): Use double type for
Jim Blandy <jimb@redhat.com>
parents: 3683
diff changeset
8458 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
8459 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
8460 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
8461 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8462 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8463 #endif /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8464
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8465 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
8466 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8467
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8468
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8469 /* 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
8470 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
8471 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
8472 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
8473 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
8474 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
8475 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
8476
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8477 /* 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
8478 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
8479 `*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
8480
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
8481 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8482 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
8483 FRAME_PTR frame;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8484 {
13205
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
8485 /* 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
8486 while (! NILP (FRAME_SCROLL_BARS (frame)))
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
8487 {
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
8488 Lisp_Object bar;
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
8489 bar = FRAME_SCROLL_BARS (frame);
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
8490 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
8491 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
8492 XSCROLL_BAR (bar)->prev = Qnil;
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
8493 if (! NILP (FRAME_CONDEMNED_SCROLL_BARS (frame)))
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
8494 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
8495 FRAME_CONDEMNED_SCROLL_BARS (frame) = bar;
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
8496 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8497 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8498
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8499 /* 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
8500 Note that WINDOW isn't necessarily condemned at all. */
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8501 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8502 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
8503 struct window *window;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8504 {
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8505 struct scroll_bar *bar;
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8506
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8507 /* 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
8508 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
8509 abort ();
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8510
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8511 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
8512
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8513 /* Unlink it from the condemned list. */
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8514 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8515 FRAME_PTR f = XFRAME (WINDOW_FRAME (window));
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8516
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8517 if (NILP (bar->prev))
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8518 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8519 /* If the prev pointer is nil, it must be the first in one of
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8520 the lists. */
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8521 if (EQ (FRAME_SCROLL_BARS (f), window->vertical_scroll_bar))
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8522 /* It's not condemned. Everything's fine. */
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8523 return;
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8524 else if (EQ (FRAME_CONDEMNED_SCROLL_BARS (f),
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8525 window->vertical_scroll_bar))
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8526 FRAME_CONDEMNED_SCROLL_BARS (f) = bar->next;
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8527 else
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8528 /* If its prev pointer is nil, it must be at the front of
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8529 one or the other! */
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8530 abort ();
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8531 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8532 else
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8533 XSCROLL_BAR (bar->prev)->next = bar->next;
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8534
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8535 if (! NILP (bar->next))
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8536 XSCROLL_BAR (bar->next)->prev = bar->prev;
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8537
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8538 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
8539 bar->prev = Qnil;
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8540 XSETVECTOR (FRAME_SCROLL_BARS (f), bar);
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8541 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
8542 XSETVECTOR (XSCROLL_BAR (bar->next)->prev, bar);
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8543 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8544 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8545
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8546 /* 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
8547 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
8548
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8549 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8550 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
8551 FRAME_PTR f;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8552 {
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8553 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
8554
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8555 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
8556
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
8557 /* 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
8558 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
8559 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
8560
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
8561 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
8562 {
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8563 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
8564
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8565 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
8566
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8567 next = b->next;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8568 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
8569 }
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8570
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8571 /* 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
8572 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
8573 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8574
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8575
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8576 /* 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
8577 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
8578
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8579 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
8580 mark bits. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8581
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8582 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8583 x_scroll_bar_expose (bar, event)
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8584 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
8585 XEvent *event;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8586 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8587 #ifndef USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8588
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8589 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
8590 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
8591 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
8592 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
8593
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8594 BLOCK_INPUT;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8595
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8596 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
8597
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8598 /* 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
8599 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
8600
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8601 /* 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
8602 0, 0,
16301
a02555b4b2b9 (x_scroll_bar_create, x_scroll_bar_move):
Richard M. Stallman <rms@gnu.org>
parents: 16251
diff changeset
8603 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
8604 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
8605
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8606 UNBLOCK_INPUT;
24991
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 #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
8609 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8610
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8611 /* 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
8612 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
8613
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8614 This may be called from a signal handler, so we have to ignore GC
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8615 mark bits. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8616
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8617 #ifndef USE_TOOLKIT_SCROLL_BARS
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8618
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8619 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8620 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
8621 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
8622 XEvent *event;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8623 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
8624 {
10287
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
8625 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
8626 abort ();
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8627
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8628 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
8629 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
8630 emacs_event->modifiers
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
8631 = (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
8632 (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
8633 event->xbutton.state)
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
8634 | (event->type == ButtonRelease
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
8635 ? up_modifier
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
8636 : down_modifier));
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8637 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
8638 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
8639 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
8640 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8641 #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
8642 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
8643 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
8644 = 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
8645 #endif
10287
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
8646 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
8647 = 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
8648 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
8649
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8650 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
8651 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
8652
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8653 if (y < XINT (bar->start))
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8654 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
8655 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
8656 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
8657 else
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8658 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
8659
5440f00480e6 * xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents: 2923
diff changeset
8660 /* 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
8661 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
8662 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
8663 #if 0
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8664 /* 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
8665 holding it. */
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8666 if (event->type == ButtonPress
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8667 && 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
8668 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
8669 #endif
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8670
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8671 /* 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
8672 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
8673 && ! NILP (bar->dragging))
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8674 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8675 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
8676 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
8677
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8678 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
8679 bar->dragging = Qnil;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8680 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8681
2958
3124e6244d1a * xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents: 2953
diff changeset
8682 /* 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
8683 #if 0
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
8684 /* 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
8685 the handle. */
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8686 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
8687 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
8688 else
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8689 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
8690 #else
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8691 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
8692 #endif
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8693
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8694 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
8695 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8696 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8697
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8698 /* 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
8699
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8700 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
8701 mark bits. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8702
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8703 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8704 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
8705 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
8706 XEvent *event;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8707 {
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
8708 FRAME_PTR f = XFRAME (XWINDOW (bar->window)->frame);
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
8709
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8710 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
8711
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
8712 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
8713 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
8714
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8715 /* 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
8716 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
8717 {
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8718 /* 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
8719 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
8720
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8721 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
8722 {
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8723 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
8724
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8725 x_scroll_bar_set_handle (bar, 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
8726 }
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 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8729
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8730 #endif /* !USE_TOOLKIT_SCROLL_BARS */
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
8731
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8732 /* 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
8733 on the scroll bar. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8734
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8735 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
8736 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
8737 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
8738 Lisp_Object *bar_window;
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8739 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
8740 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
8741 unsigned long *time;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8742 {
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8743 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
8744 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
8745 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
8746 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
8747 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
8748 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
8749 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
8750
1803
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
8751 BLOCK_INPUT;
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
8752
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8753 /* 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
8754 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
8755 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
8756
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
8757 /* 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
8758 &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
8759 &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
8760
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
8761 /* 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
8762 &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
8763
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
8764 /* 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
8765 &dummy_mask))
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8766 ;
2982
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
8767 else
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
8768 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8769 #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
8770 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
8771 = 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
8772 #endif
2982
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
8773 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
8774 = 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
8775
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
8776 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
8777
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
8778 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
8779 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
8780
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
8781 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
8782 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
8783 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
8784 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
8785
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
8786 *fp = f;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8787 *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
8788
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
8789 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
8790 *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
8791 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
8792 *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
8793 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
8794 *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
8795 else
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
8796 *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
8797
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8798 XSETINT (*x, win_y);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8799 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
8800
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
8801 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
8802 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
8803 }
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
8804
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
8805 *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
8806
1803
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
8807 UNBLOCK_INPUT;
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8808 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8809
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8810
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8811 /* 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
8812 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
8813 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
8814 redraw them. */
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8815
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
8816 void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8817 x_scroll_bar_clear (f)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8818 FRAME_PTR f;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8819 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8820 #ifndef USE_TOOLKIT_SCROLL_BARS
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8821 Lisp_Object bar;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8822
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
8823 /* 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
8824 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
8825 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
8826 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
8827 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
8828 bar = XSCROLL_BAR (bar)->next)
50f527612ef6 (x_scroll_bar_clear): Do nothing if frame now has no scroll bars.
Richard M. Stallman <rms@gnu.org>
parents: 15067
diff changeset
8829 XClearArea (FRAME_X_DISPLAY (f), SCROLL_BAR_X_WINDOW (XSCROLL_BAR (bar)),
50f527612ef6 (x_scroll_bar_clear): Do nothing if frame now has no scroll bars.
Richard M. Stallman <rms@gnu.org>
parents: 15067
diff changeset
8830 0, 0, 0, 0, True);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8831 #endif /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8832 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8833
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8834 /* 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
8835 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
8836 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
8837
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8838 int
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8839 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
8840 XEvent event;
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8841 {
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8842 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
8843 struct x_display_info *dpyinfo;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8844 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
8845
5872
6389c826f847 (x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents: 5825
diff changeset
8846 BLOCK_INPUT;
6389c826f847 (x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents: 5825
diff changeset
8847
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
8848 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
8849 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
8850 if (f)
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8851 {
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8852 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
8853 {
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8854 f->async_visible = 1;
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8855 f->async_iconified = 0;
18074
06e42aa4c208 (process_expose_from_menu, XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 18057
diff changeset
8856 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
8857 SET_FRAME_GARBAGED (f);
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8858 }
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8859 else
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8860 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8861 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
8862 event.xexpose.x, event.xexpose.y,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8863 event.xexpose.width, event.xexpose.height);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8864 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
8865 }
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8866 }
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8867 else
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8868 {
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8869 struct scroll_bar *bar
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8870 = x_window_to_scroll_bar (event.xexpose.window);
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
8871
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8872 if (bar)
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8873 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
8874 }
5872
6389c826f847 (x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents: 5825
diff changeset
8875
6389c826f847 (x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents: 5825
diff changeset
8876 UNBLOCK_INPUT;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8877 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
8878 }
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8879
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8880 /* 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
8881
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8882 struct selection_event_queue
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8883 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8884 XEvent event;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8885 struct selection_event_queue *next;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8886 };
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8887
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8888 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
8889
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8890 /* 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
8891
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8892 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
8893
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8894 /* 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
8895
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8896 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
8897 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
8898 FRAME_PTR f;
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8899 XEvent *event;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8900 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8901 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
8902 = (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
8903
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
8904 if (queue_tmp != NULL)
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8905 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8906 queue_tmp->event = *event;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8907 queue_tmp->next = queue;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8908 queue = queue_tmp;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8909 }
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8910 }
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8911
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8912 /* 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
8913 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
8914
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8915 static void
10634
de7beeb9f02c (x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents: 10609
diff changeset
8916 x_unqueue_events (display)
de7beeb9f02c (x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents: 10609
diff changeset
8917 Display *display;
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8918 {
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
8919 while (queue != NULL)
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8920 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8921 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
8922 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
8923 queue = queue_tmp->next;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8924 xfree ((char *)queue_tmp);
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8925 }
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8926 }
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8927
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8928 /* Start queuing SelectionRequest events. */
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8929
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8930 void
10634
de7beeb9f02c (x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents: 10609
diff changeset
8931 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
8932 Display *display;
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8933 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8934 x_queue_selection_requests++;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8935 }
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8936
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8937 /* Stop queuing SelectionRequest events. */
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8938
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8939 void
10634
de7beeb9f02c (x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents: 10609
diff changeset
8940 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
8941 Display *display;
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8942 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8943 x_queue_selection_requests--;
10634
de7beeb9f02c (x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents: 10609
diff changeset
8944 x_unqueue_events (display);
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8945 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8946
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8947 /* The main X event-reading loop - XTread_socket. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8948
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8949 /* 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
8950 but we have to put it out here, since static variables within functions
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8951 sometimes don't work. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8952
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8953 static Time enter_timestamp;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8954
1436
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
8955 /* 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
8956 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
8957 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
8958 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
8959
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
8960 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
8961 given for enter_time stamp, above. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8962
1436
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
8963 static XComposeStatus compose_status;
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
8964
2064
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
8965 /* Record the last 100 characters stored
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
8966 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
8967
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
8968 static int temp_index;
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
8969 static short temp_buffer[100];
2064
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
8970
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8971 /* 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
8972 on a particular display. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8973
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8974 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
8975
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
8976 /* 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
8977 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
8978 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
8979 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
8980
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
8981 static struct x_display_info *next_noop_dpyinfo;
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
8982
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8983 #define SET_SAVED_MENU_EVENT(size) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8984 do \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8985 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8986 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
8987 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
8988 = (XEvent *) xmalloc (sizeof (XEvent)); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8989 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
8990 if (numchars >= 1) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8991 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8992 bufp->kind = menu_bar_activate_event; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8993 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
8994 bufp->arg = Qnil; \
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8995 bufp++; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8996 count++; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8997 numchars--; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8998 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8999 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9000 while (0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9001
15711
099dc465c948 (SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents: 15639
diff changeset
9002 #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
9003 #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
9004
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9005 /* Read events coming from the X server.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9006 This routine is called by the SIGIO handler.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9007 We return as soon as there are no more events to be read.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9008
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9009 Events representing keys are stored in buffer BUFP,
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9010 which can hold up to NUMCHARS characters.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9011 We return the number of characters stored into the buffer,
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9012 thus pretending to be `read'.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9013
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9014 EXPECTED is nonzero if the caller knows input is available. */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9015
1530
a7f8a1fe258e * xterm.c (x_convert_modifiers): Declare this to return an
Jim Blandy <jimb@redhat.com>
parents: 1436
diff changeset
9016 int
16330
e4d9d77012bc (XTread_socket): Delete WAITP arg.
Richard M. Stallman <rms@gnu.org>
parents: 16301
diff changeset
9017 XTread_socket (sd, bufp, numchars, expected)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9018 register int sd;
15711
099dc465c948 (SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents: 15639
diff changeset
9019 /* register */ struct input_event *bufp;
099dc465c948 (SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents: 15639
diff changeset
9020 /* register */ int numchars;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9021 int expected;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9022 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9023 int count = 0;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9024 int nbytes = 0;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9025 XEvent event;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
9026 struct frame *f;
3938
83d870a52936 * xterm.c (XTread_socket): Initialize event_found to zero, and
Jim Blandy <jimb@redhat.com>
parents: 3924
diff changeset
9027 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
9028 struct x_display_info *dpyinfo;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9029
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2353
diff changeset
9030 if (interrupt_input_blocked)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9031 {
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2353
diff changeset
9032 interrupt_input_pending = 1;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9033 return -1;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9034 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9035
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2353
diff changeset
9036 interrupt_input_pending = 0;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9037 BLOCK_INPUT;
9337
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
9038
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
9039 /* 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
9040 input_signal_count++;
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
9041
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9042 if (numchars <= 0)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9043 abort (); /* Don't think this happens. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9044
30083
998d20abc885 (XTread_socket): Increment handling_signal at the start,
Gerd Moellmann <gerd@gnu.org>
parents: 30050
diff changeset
9045 ++handling_signal;
998d20abc885 (XTread_socket): Increment handling_signal at the start,
Gerd Moellmann <gerd@gnu.org>
parents: 30050
diff changeset
9046
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9047 /* 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
9048 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
9049 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
9050 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9051 #if 0 /* This ought to be unnecessary; let's verify it. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9052 #ifdef FIOSNBIO
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9053 /* 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
9054 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
9055 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
9056 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
9057 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
9058 #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
9059 #endif
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9060
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9061 #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
9062 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
9063 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
9064 for X connections. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9065 #ifndef SIGIO
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9066 #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
9067 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
9068 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9069 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
9070 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
9071 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
9072 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
9073 }
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
9074 #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
9075 #endif /* SIGIO */
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9076 #endif
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9077
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9078 /* 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
9079 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
9080 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9081 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
9082 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
9083 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9084
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9085 while (XPending (dpyinfo->display))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9086 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9087 XNextEvent (dpyinfo->display, &event);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9088
15973
6ad9e8fee494 (XTread_socket): Call XFilterEvent on all events,
Richard M. Stallman <rms@gnu.org>
parents: 15928
diff changeset
9089 #ifdef HAVE_X_I18N
15990
1185f8fc0bfb (do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents: 15973
diff changeset
9090 {
26968
3039d2412c9e (XTread_socket): At the beginning of the loop, pass the
Gerd Moellmann <gerd@gnu.org>
parents: 26912
diff changeset
9091 /* 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
9092 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
9093 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
9094 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
9095 was created. */
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9096 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
9097 event.xclient.window);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9098 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
9099 break;
1185f8fc0bfb (do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents: 15973
diff changeset
9100 }
15973
6ad9e8fee494 (XTread_socket): Call XFilterEvent on all events,
Richard M. Stallman <rms@gnu.org>
parents: 15928
diff changeset
9101 #endif
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9102 event_found = 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9103
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9104 switch (event.type)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9105 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9106 case ClientMessage:
642
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
9107 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9108 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
9109 == 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
9110 && event.xclient.format == 32)
642
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
9111 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9112 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
9113 == 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
9114 {
18885
f7b6579204b8 (XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents: 18775
diff changeset
9115 /* Use x_any_window_to_frame because this
f7b6579204b8 (XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents: 18775
diff changeset
9116 could be the shell widget window
f7b6579204b8 (XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents: 18775
diff changeset
9117 if the frame has no title bar. */
f7b6579204b8 (XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents: 18775
diff changeset
9118 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
9119 #ifdef HAVE_X_I18N
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9120 /* Not quite sure this is needed -pd */
18885
f7b6579204b8 (XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents: 18775
diff changeset
9121 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
9122 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
9123 #endif
25921
eb5839cbfb16 (XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents: 25795
diff changeset
9124 #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
9125 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
9126 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
9127 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
9128 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
9129 needed.
eb5839cbfb16 (XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents: 25795
diff changeset
9130
eb5839cbfb16 (XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents: 25795
diff changeset
9131 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
9132 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
9133 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
9134 below can generate additional FocusIn events which confuse
eb5839cbfb16 (XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents: 25795
diff changeset
9135 Emacs. */
eb5839cbfb16 (XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents: 25795
diff changeset
9136
18996
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9137 /* 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
9138 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
9139 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
9140 if (f)
18996
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9141 {
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9142 Display *d = event.xclient.display;
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9143 /* 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
9144 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
9145 int count = x_catch_errors (d);
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9146 XSetInputFocus (d, event.xclient.window,
25633
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
9147 /* The ICCCM says this is
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
9148 the only valid choice. */
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
9149 RevertToParent,
18996
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9150 event.xclient.data.l[1]);
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9151 /* 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
9152 if there is an error. */
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9153 XSync (d, False);
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9154 x_uncatch_errors (d, count);
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
9155 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9156 /* Not certain about handling scroll bars here */
25921
eb5839cbfb16 (XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents: 25795
diff changeset
9157 #endif /* 0 */
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9158 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9159 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
9160 == dpyinfo->Xatom_wm_save_yourself)
642
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
9161 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9162 /* 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
9163 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
9164 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
9165 PropertyNotify. Can restart processing when
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9166 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
9167 if (numchars > 0)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9168 {
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
9169 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
9170 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
9171
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9172 /* 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
9173 for a single Emacs process. */
25682
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
9174 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
9175 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
9176 event.xclient.window,
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9177 initial_argv, initial_argc);
15519
045a36502ad4 (XTread_socket, Xatom_wm_save_yourself clause):
Richard M. Stallman <rms@gnu.org>
parents: 15515
diff changeset
9178 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
9179 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
9180 event.xclient.window,
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9181 0, 0);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9182 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9183 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9184 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
9185 == 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
9186 {
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
9187 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
9188 = 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
9189 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
9190
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9191 if (f)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9192 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9193 if (numchars == 0)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9194 abort ();
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9195
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9196 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
9197 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
9198 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
9199 bufp++;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9200
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9201 count += 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9202 numchars -= 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9203 }
642
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
9204 }
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
9205 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9206 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
9207 == dpyinfo->Xatom_wm_configure_denied)
642
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
9208 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9209 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9210 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
9211 == 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
9212 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9213 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
9214 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
9215 = 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
9216
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9217 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
9218 new_y = event.xclient.data.s[1];
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
9219
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
9220 if (f)
5156
fd78458b8c43 (XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents: 5018
diff changeset
9221 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
9222 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
9223 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
9224 }
642
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
9225 }
13507
9a9f459075af (HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
9226 #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
9227 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
9228 == dpyinfo->Xatom_editres)
5156
fd78458b8c43 (XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents: 5018
diff changeset
9229 {
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
9230 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
9231 = 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
9232 _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
9233 &event, NULL);
5156
fd78458b8c43 (XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents: 5018
diff changeset
9234 }
13507
9a9f459075af (HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
9235 #endif /* HACK_EDITRES */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9236 else if ((event.xclient.message_type
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9237 == dpyinfo->Xatom_DONE)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9238 || (event.xclient.message_type
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9239 == dpyinfo->Xatom_PAGE))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9240 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9241 /* 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
9242 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
9243 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
9244 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
9245 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
9246 struct frame *f
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9247 = 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
9248 x_kill_gs_process (pixmap, f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9249 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
9250 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9251 #ifdef USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9252 /* 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
9253 we construct an input_event. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9254 else if (event.xclient.message_type
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9255 == dpyinfo->Xatom_Scrollbar)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9256 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9257 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
9258 ++bufp, ++count, --numchars;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9259 goto out;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9260 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9261 #endif /* USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9262 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9263 goto OTHER;
642
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
9264 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9265 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9266
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9267 case SelectionNotify:
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9268 #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
9269 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
9270 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9271 #endif /* not USE_X_TOOLKIT */
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
9272 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
9273 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9274
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9275 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
9276 #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
9277 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
9278 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9279 #endif /* USE_X_TOOLKIT */
6941
a914781ef58a (Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents: 6934
diff changeset
9280 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9281 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
9282
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9283 if (numchars == 0)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9284 abort ();
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9285
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9286 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
9287 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
9288 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
9289 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
9290 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
9291 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
9292 bufp++;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9293
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9294 count += 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9295 numchars -= 1;
6941
a914781ef58a (Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents: 6934
diff changeset
9296 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9297 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9298
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9299 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
9300 #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
9301 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
9302 goto OTHER;
6984
8e9465c13702 (XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents: 6983
diff changeset
9303 #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
9304 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
9305 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
9306 &event);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9307 else
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9308 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9309 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
9310
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9311 if (numchars == 0)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9312 abort ();
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9313
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9314 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
9315 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
9316 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
9317 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
9318 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
9319 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
9320 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
9321 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
9322 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
9323 bufp++;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9324
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9325 count += 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9326 numchars -= 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9327 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9328 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9329
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9330 case PropertyNotify:
6984
8e9465c13702 (XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents: 6983
diff changeset
9331 #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
9332 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
9333 goto OTHER;
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9334 #endif /* not USE_X_TOOLKIT */
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
9335 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
9336 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9337
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9338 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
9339 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
9340 if (f)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9341 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9342 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
9343 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
9344 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
9345 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
9346 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
9347 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9348 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9349
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9350 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
9351 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
9352 if (f)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9353 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9354 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
9355 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9356 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
9357 f->async_iconified = 0;
18074
06e42aa4c208 (process_expose_from_menu, XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 18057
diff changeset
9358 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
9359 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
9360 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9361 else
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9362 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
9363 event.xexpose.window),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9364 event.xexpose.x, event.xexpose.y,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9365 event.xexpose.width, event.xexpose.height);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9366 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9367 else
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9368 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9369 #ifdef USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9370 /* Dispatch event to the widget. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9371 goto OTHER;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9372 #else /* not USE_TOOLKIT_SCROLL_BARS */
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9373 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
9374 = x_window_to_scroll_bar (event.xexpose.window);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9375
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9376 if (bar)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9377 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
9378 #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
9379 else
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9380 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9381 #endif /* USE_X_TOOLKIT */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9382 #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
9383 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9384 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9385
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9386 case 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
9387 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
9388 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
9389 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
9390 if (f)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9391 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9392 expose_frame (f,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9393 event.xgraphicsexpose.x, event.xgraphicsexpose.y,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9394 event.xgraphicsexpose.width,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9395 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
9396 }
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9397 #ifdef USE_X_TOOLKIT
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9398 else
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9399 goto OTHER;
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9400 #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
9401 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9402
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9403 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
9404 source area was completely
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9405 available */
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9406 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9407
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9408 case UnmapNotify:
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9409 /* 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
9410 if (event.xmap.window == tip_window)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9411 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9412 tip_window = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9413 redo_mouse_highlight ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9414 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9415
12750
7e5276da6270 (XTread_socket): For UnmapNotify, use x_top_window_to_frame.
Richard M. Stallman <rms@gnu.org>
parents: 12667
diff changeset
9416 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
9417 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
9418 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
9419 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9420 /* 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
9421 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
9422 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
9423 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
9424 /* 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
9425 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
9426 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
9427 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
9428 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
9429 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
9430 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
9431 {
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
9432 f->async_iconified = 1;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
9433
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
9434 bufp->kind = iconify_event;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
9435 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
9436 bufp->arg = Qnil;
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
9437 bufp++;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
9438 count++;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
9439 numchars--;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
9440 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9441 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9442 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9443
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9444 case MapNotify:
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9445 if (event.xmap.window == tip_window)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9446 /* 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
9447 the SET_FRAME_GARBAGED below. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9448 goto OTHER;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9449
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9450 /* 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
9451 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
9452 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
9453 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
9454 if (f)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9455 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9456 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
9457 f->async_iconified = 0;
18074
06e42aa4c208 (process_expose_from_menu, XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 18057
diff changeset
9458 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
9459
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9460 /* 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
9461 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
9462 SET_FRAME_GARBAGED (f);
9823
e6dbda62fd61 (XTread_socket): Generate iconify and deiconify events.
Karl Heuer <kwzh@gnu.org>
parents: 9763
diff changeset
9463
11348
e366abc2c753 (XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents: 11259
diff changeset
9464 if (f->iconified)
e366abc2c753 (XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents: 11259
diff changeset
9465 {
e366abc2c753 (XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents: 11259
diff changeset
9466 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
9467 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
9468 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
9469 bufp++;
e366abc2c753 (XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents: 11259
diff changeset
9470 count++;
e366abc2c753 (XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents: 11259
diff changeset
9471 numchars--;
e366abc2c753 (XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents: 11259
diff changeset
9472 }
17519
5aa7011aa3d5 (x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents: 17371
diff changeset
9473 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
9474 && ! NILP (XCDR (Vframe_list)))
11921
6ecaa3fac4e4 (XTread_socket): For MapNotify, call record_asynch_buffer_change.
Karl Heuer <kwzh@gnu.org>
parents: 11915
diff changeset
9475 /* 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
9476 to update the frame titles
6ecaa3fac4e4 (XTread_socket): For MapNotify, call record_asynch_buffer_change.
Karl Heuer <kwzh@gnu.org>
parents: 11915
diff changeset
9477 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
9478 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
9479 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9480 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9481
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9482 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
9483 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
9484
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9485 #ifdef USE_MOTIF
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9486 /* I couldn't find a way to prevent LessTif scroll bars
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9487 from consuming key events. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9488 if (f == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9489 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9490 Widget widget = XtWindowToWidget (dpyinfo->display,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9491 event.xkey.window);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9492 if (widget && XmIsScrollBar (widget))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9493 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9494 widget = XtParent (widget);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9495 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
9496 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9497 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9498 #endif /* USE_MOTIF */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9499
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9500 if (f != 0)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9501 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9502 KeySym keysym, orig_keysym;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9503 /* al%imercury@uunet.uu.net says that making this 81 instead of
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9504 80 fixed a bug whereby meta chars made his Emacs hang. */
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9505 unsigned char copy_buffer[81];
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9506 int modifiers;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9507
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9508 event.xkey.state
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9509 |= 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
9510 extra_keyboard_modifiers);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9511 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
9512
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9513 /* 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
9514
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9515 /* 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
9516 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
9517 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
9518 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
9519 | 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
9520 | 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
9521 | 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
9522
16483
1b53fdb98184 (XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents: 16430
diff changeset
9523 /* In case Meta is ComposeCharacter,
1b53fdb98184 (XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents: 16430
diff changeset
9524 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
9525 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
9526 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
9527 not it is combined with Meta. */
1b53fdb98184 (XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents: 16430
diff changeset
9528 if (modifiers & dpyinfo->meta_mod_mask)
1b53fdb98184 (XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents: 16430
diff changeset
9529 bzero (&compose_status, sizeof (compose_status));
1b53fdb98184 (XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents: 16430
diff changeset
9530
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9531 #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
9532 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
9533 {
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9534 unsigned char *copy_bufptr = copy_buffer;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9535 int copy_bufsiz = sizeof (copy_buffer);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9536 Status status_return;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9537
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9538 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
9539 &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
9540 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
9541 &status_return);
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9542 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
9543 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9544 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
9545 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
9546 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
9547 &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
9548 copy_bufsiz, &keysym,
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9549 &status_return);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9550 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9551
23567
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
9552 if (status_return == XLookupNone)
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
9553 break;
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
9554 else if (status_return == XLookupChars)
29744
1ac32ce72622 (XTread_socket) <KeyPress>: In case XmbLookupString
Gerd Moellmann <gerd@gnu.org>
parents: 29717
diff changeset
9555 {
1ac32ce72622 (XTread_socket) <KeyPress>: In case XmbLookupString
Gerd Moellmann <gerd@gnu.org>
parents: 29717
diff changeset
9556 keysym = NoSymbol;
1ac32ce72622 (XTread_socket) <KeyPress>: In case XmbLookupString
Gerd Moellmann <gerd@gnu.org>
parents: 29717
diff changeset
9557 modifiers = 0;
1ac32ce72622 (XTread_socket) <KeyPress>: In case XmbLookupString
Gerd Moellmann <gerd@gnu.org>
parents: 29717
diff changeset
9558 }
23567
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
9559 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
9560 && status_return != XLookupBoth)
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
9561 abort ();
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9562 }
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9563 else
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9564 nbytes = XLookupString (&event.xkey, copy_buffer,
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9565 80, &keysym, &compose_status);
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9566 #else
10287
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
9567 nbytes = XLookupString (&event.xkey, copy_buffer,
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
9568 80, &keysym, &compose_status);
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9569 #endif
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9570
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9571 orig_keysym = keysym;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9572
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9573 if (numchars > 1)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9574 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9575 if (((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
9576 || keysym == XK_Delete
17227
d11d6c9a48e8 (XTread_socket): Handle ISO_Left_Tab.
Richard M. Stallman <rms@gnu.org>
parents: 17194
diff changeset
9577 #ifdef XK_ISO_Left_Tab
17232
4604d19bd730 (XTread_socket): Accept XK_ISO_* keys.
Richard M. Stallman <rms@gnu.org>
parents: 17227
diff changeset
9578 || (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
9579 #endif
22400
8fbe6f509385 (XTread_socket): Accept Japanese XK keysyms.
Richard M. Stallman <rms@gnu.org>
parents: 22230
diff changeset
9580 || (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
9581 || 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
9582 || IsMiscFunctionKey (keysym) /* 0xff60 <= x < VARIES */
3218
0069a30d083f (XTread_socket, case KeyPress) [HPUX]:
Richard M. Stallman <rms@gnu.org>
parents: 3135
diff changeset
9583 #ifdef HPUX
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9584 /* 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
9585 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
9586 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
9587 incorrectly. */
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9588 || ((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
9589 && (unsigned)(keysym) < XK_KP_Space)
3218
0069a30d083f (XTread_socket, case KeyPress) [HPUX]:
Richard M. Stallman <rms@gnu.org>
parents: 3135
diff changeset
9590 #endif
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9591 #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
9592 || orig_keysym == XK_dead_circumflex
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9593 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9594 #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
9595 || orig_keysym == XK_dead_grave
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9596 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9597 #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
9598 || orig_keysym == XK_dead_tilde
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9599 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9600 #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
9601 || orig_keysym == XK_dead_diaeresis
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9602 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9603 #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
9604 || orig_keysym == XK_dead_macron
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9605 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9606 #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
9607 || orig_keysym == XK_dead_degree
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9608 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9609 #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
9610 || orig_keysym == XK_dead_acute
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9611 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9612 #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
9613 || orig_keysym == XK_dead_cedilla
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9614 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9615 #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
9616 || orig_keysym == XK_dead_breve
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9617 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9618 #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
9619 || orig_keysym == XK_dead_ogonek
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9620 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9621 #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
9622 || orig_keysym == XK_dead_caron
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9623 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9624 #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
9625 || orig_keysym == XK_dead_doubleacute
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9626 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9627 #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
9628 || orig_keysym == XK_dead_abovedot
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9629 #endif
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9630 || 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
9631 || 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
9632 /* 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
9633 || (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
9634 && ! (IsModifierKey (orig_keysym)
4244
bc70363458c3 (XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents: 4147
diff changeset
9635 #ifndef HAVE_X11R5
bc70363458c3 (XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents: 4147
diff changeset
9636 #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
9637 || ((unsigned)(orig_keysym) == XK_Mode_switch)
4244
bc70363458c3 (XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents: 4147
diff changeset
9638 #endif
bc70363458c3 (XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents: 4147
diff changeset
9639 #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
9640 || ((unsigned)(orig_keysym) == XK_Num_Lock)
4244
bc70363458c3 (XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents: 4147
diff changeset
9641 #endif
bc70363458c3 (XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents: 4147
diff changeset
9642 #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
9643 ))
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9644 {
2064
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
9645 if (temp_index == sizeof temp_buffer / sizeof (short))
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
9646 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
9647 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
9648 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
9649 bufp->code = keysym;
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
9650 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
9651 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
9652 bufp->modifiers
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
9653 = 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
9654 modifiers);
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 642
diff changeset
9655 bufp->timestamp = event.xkey.time;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9656 bufp++;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9657 count++;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9658 numchars--;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9659 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9660 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
9661 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9662 register int i;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9663
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9664 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
9665 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9666 if (temp_index == sizeof temp_buffer / sizeof (short))
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9667 temp_index = 0;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9668 temp_buffer[temp_index++] = copy_buffer[i];
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9669 bufp->kind = ascii_keystroke;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9670 bufp->code = copy_buffer[i];
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9671 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
9672 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
9673 bufp->modifiers
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9674 = 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
9675 modifiers);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9676 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
9677 bufp++;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9678 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9679
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9680 count += nbytes;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9681 numchars -= nbytes;
23567
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
9682
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
9683 if (keysym == NoSymbol)
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
9684 break;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9685 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9686 else
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9687 abort ();
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9688 }
2064
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
9689 else
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
9690 abort ();
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9691 }
27619
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
9692 #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
9693 /* 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
9694 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
9695 client. */
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
9696 break;
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
9697 #else
13898
dceb33c07f9e (XTread_socket): Pass KeyPress events to the toolkit.
Richard M. Stallman <rms@gnu.org>
parents: 13884
diff changeset
9698 goto OTHER;
27619
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
9699 #endif
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9700
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9701 case KeyRelease:
27619
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
9702 #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
9703 /* 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
9704 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
9705 client. */
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
9706 break;
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
9707 #else
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9708 goto OTHER;
27619
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
9709 #endif
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9710
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9711 /* 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
9712 FocusIn-EnterNotify FocusOut-LeaveNotify mess. If
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9713 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
9714 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
9715 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
9716 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
9717
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9718 case EnterNotify:
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9719 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9720 int from_menu_bar_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9721
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9722 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
9723
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9724 #ifdef LESSTIF_VERSION
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9725 /* When clicking outside of a menu bar popup to close
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9726 it, we get a FocusIn/ EnterNotify sequence of
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9727 events. The flag event.xcrossing.focus is not set
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9728 in the EnterNotify event of that sequence because
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9729 the focus is in the menu bar,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9730 event.xcrossing.window is the frame's X window.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9731 Unconditionally setting the focus frame to null in
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9732 this case is not the right thing, because no event
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9733 follows that could set the focus frame to the right
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9734 value.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9735
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9736 This could be a LessTif bug, but I wasn't able to
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9737 reproduce the behavior in a simple test program.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9738
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9739 (gerd, LessTif 0.88.1). */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9740
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9741 if (!event.xcrossing.focus
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9742 && f
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9743 && f->output_data.x->menubar_widget)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9744 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9745 Window focus;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9746 int revert;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9747
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9748 XGetInputFocus (FRAME_X_DISPLAY (f), &focus, &revert);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9749 if (focus == XtWindow (f->output_data.x->menubar_widget))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9750 from_menu_bar_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9751 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9752 #endif /* LESSTIF_VERSION */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9753
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9754 if (event.xcrossing.focus || from_menu_bar_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9755 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9756 /* Avoid nasty pop/raise loops. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9757 if (f && (!(f->auto_raise)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9758 || !(f->auto_lower)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9759 || (event.xcrossing.time - enter_timestamp) > 500))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9760 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9761 x_new_focus_frame (dpyinfo, f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9762 enter_timestamp = event.xcrossing.time;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9763 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9764 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9765 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
9766 x_new_focus_frame (dpyinfo, 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9767
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9768 /* EnterNotify counts as mouse movement,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9769 so update things that depend on mouse position. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9770 if (f && !f->output_data.x->busy_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9771 note_mouse_movement (f, &event.xmotion);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9772 goto OTHER;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9773 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9774
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9775 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
9776 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
9777 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
9778 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
9779 if (f)
29512
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
9780 {
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
9781 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
9782
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
9783 /* 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
9784 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
9785 if (GC_NILP (Vterminal_frame)
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
9786 && GC_CONSP (Vframe_list)
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
9787 && !GC_NILP (XCDR (Vframe_list)))
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
9788 {
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
9789 bufp->kind = FOCUS_IN_EVENT;
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
9790 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
9791 bufp->arg = Qnil;
29512
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
9792 ++bufp, ++count, --numchars;
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
9793 }
e222720769a0 (XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents: 29458
diff changeset
9794 }
13205
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
9795
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9796 #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
9797 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
9798 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
9799 #endif
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9800
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9801 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9802
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9803 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
9804 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
9805 if (f)
7169
c21fcad6f1f5 (XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents: 7167
diff changeset
9806 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9807 Lisp_Object frame;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9808 int from_menu_bar_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9809
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9810 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
9811 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9812 /* 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
9813 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
9814 clear_mouse_face (dpyinfo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9815 dpyinfo->mouse_face_mouse_frame = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9816 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9817
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9818 /* 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
9819 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
9820 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
9821 the mouse leaves the frame. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9822 if (any_help_event_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9823 {
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
9824 Lisp_Object frame;
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
9825 int n;
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
9826
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9827 XSETFRAME (frame, f);
30302
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
9828 n = gen_help_event (bufp, Qnil, frame, Qnil, Qnil, 0);
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
9829 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
9830 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9831
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9832 #ifdef LESSTIF_VERSION
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9833 /* Please see the comment at the start of the
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9834 EnterNotify case. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9835 if (!event.xcrossing.focus
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9836 && f->output_data.x->menubar_widget)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9837 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9838 Window focus;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9839 int revert;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9840 XGetInputFocus (FRAME_X_DISPLAY (f), &focus, &revert);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9841 if (focus == XtWindow (f->output_data.x->menubar_widget))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9842 from_menu_bar_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9843 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9844 #endif /* LESSTIF_VERSION */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9845
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9846 if (event.xcrossing.focus || from_menu_bar_p)
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
9847 x_mouse_leave (dpyinfo);
7169
c21fcad6f1f5 (XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents: 7167
diff changeset
9848 else
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9849 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
9850 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
9851 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
9852 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
9853 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
9854 }
7169
c21fcad6f1f5 (XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents: 7167
diff changeset
9855 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9856 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9857
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9858 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
9859 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
9860 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
9861 && 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
9862 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
9863 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
9864 x_new_focus_frame (dpyinfo, 0);
13205
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
9865
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9866 #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
9867 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
9868 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
9869 #endif
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9870
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9871 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9872
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9873 case MotionNotify:
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9874 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9875 previous_help_echo = help_echo;
30302
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
9876 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
9877 help_echo_pos = -1;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9878
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9879 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
9880 && 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
9881 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
9882 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
9883 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
9884
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9885 if (f)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9886 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
9887 else
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9888 {
25795
84921c27b2b5 (XTread_socket) <MotionNotify>: Change #ifdef
Gerd Moellmann <gerd@gnu.org>
parents: 25716
diff changeset
9889 #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
9890 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
9891 = 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
9892
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9893 if (bar)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9894 x_scroll_bar_note_movement (bar, &event);
25795
84921c27b2b5 (XTread_socket) <MotionNotify>: Change #ifdef
Gerd Moellmann <gerd@gnu.org>
parents: 25716
diff changeset
9895 #endif /* USE_TOOLKIT_SCROLL_BARS */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9896
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9897 /* 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
9898 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
9899 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
9900 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9901
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9902 /* 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
9903 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
9904 if (!NILP (help_echo)
ed1979c6dfb9 * xterm.c (note_mode_line_highlight, note_mouse_highlight)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30042
diff changeset
9905 || !NILP (previous_help_echo))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9906 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9907 Lisp_Object frame;
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
9908 int n;
24991
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 if (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9911 XSETFRAME (frame, f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9912 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9913 frame = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9914
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9915 any_help_event_p = 1;
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
9916 n = gen_help_event (bufp, help_echo, frame,
30302
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
9917 help_echo_window, help_echo_object,
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
9918 help_echo_pos);
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
9919 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
9920 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9921
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9922 goto OTHER;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
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
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9925 case ConfigureNotify:
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
9926 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
9927 if (f)
3030
2c5ea1c98256 (XTread_socket): For ConfigureNotify event,
Richard M. Stallman <rms@gnu.org>
parents: 3016
diff changeset
9928 {
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
9929 #ifndef USE_X_TOOLKIT
24489
abf5b4802f9b (XTread_socket) <ConfigureNotify>:
Karl Heuer <kwzh@gnu.org>
parents: 24484
diff changeset
9930 int rows = PIXEL_TO_CHAR_HEIGHT (f, event.xconfigure.height);
abf5b4802f9b (XTread_socket) <ConfigureNotify>:
Karl Heuer <kwzh@gnu.org>
parents: 24484
diff changeset
9931 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
9932
11436
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
9933 /* 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
9934 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
9935 of the EmacsFrame widget. */
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
9936
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9937 /* 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
9938 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
9939 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
9940 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
9941 || 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
9942 || 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
9943 || 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
9944 {
25360
2f3ad0a21be5 Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents: 25328
diff changeset
9945 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
9946 SET_FRAME_GARBAGED (f);
16491
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
9947 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
9948 }
11436
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
9949 #endif
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
9950
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
9951 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
9952 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
9953
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9954 /* 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
9955 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
9956 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
9957 &f->output_data.x->top_pos);
d25d2472df51 (XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents: 17963
diff changeset
9958
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9959 #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
9960 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
9961 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
9962 #endif
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9963
18008
d25d2472df51 (XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents: 17963
diff changeset
9964 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
9965 {
d25d2472df51 (XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents: 17963
diff changeset
9966 /* 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
9967 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
9968 f->output_data.x->win_gravity = NorthWestGravity;
d25d2472df51 (XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents: 17963
diff changeset
9969 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
9970 }
20182
9f3dd970927e (XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents: 20180
diff changeset
9971 #ifdef USE_MOTIF
9f3dd970927e (XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents: 20180
diff changeset
9972 /* 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
9973 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
9974 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
9975 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
9976 {
9f3dd970927e (XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents: 20180
diff changeset
9977 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
9978 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
9979 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9980 #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
9981 }
11436
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
9982 goto OTHER;
9704
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 case ButtonPress:
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9985 case ButtonRelease:
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9986 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9987 /* 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
9988 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
9989 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
9990 int tool_bar_p = 0;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9991
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9992 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
9993 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
9994
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9995 if (dpyinfo->grabbed
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9996 && last_mouse_frame
10274
83aaf59dabbe (XTupdate_begin): Fix backward test in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 10223
diff changeset
9997 && 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
9998 f = last_mouse_frame;
83aaf59dabbe (XTupdate_begin): Fix backward test in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 10223
diff changeset
9999 else
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10000 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
10001
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10002 if (f)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10003 {
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
10004 /* 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
10005 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
10006 && 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
10007 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10008 Lisp_Object window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10009 int p, x, y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10010
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10011 x = event.xbutton.x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10012 y = event.xbutton.y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10013
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10014 /* Set x and y. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10015 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
10016 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
10017 {
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
10018 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
10019 tool_bar_p = 1;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10020 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10021 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10022
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
10023 if (!tool_bar_p)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10024 if (!dpyinfo->x_focus_frame
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10025 || f == dpyinfo->x_focus_frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10026 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
10027 }
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10028 else
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10029 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10030 #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
10031 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
10032 = 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
10033
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10034 if (bar)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10035 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
10036 #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
10037 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10038
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10039 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
10040 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10041 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
10042 last_mouse_frame = f;
23643
701b6bdc7a22 (XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents: 23567
diff changeset
10043 /* Ignore any mouse motion that happened
701b6bdc7a22 (XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents: 23567
diff changeset
10044 before this event; any subsequent mouse-movement
701b6bdc7a22 (XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents: 23567
diff changeset
10045 Emacs events should reflect only motion after
701b6bdc7a22 (XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents: 23567
diff changeset
10046 the ButtonPress. */
23701
6c0896abbbd4 (XTread_socket): Fix previous change in case F == 0.
Karl Heuer <kwzh@gnu.org>
parents: 23684
diff changeset
10047 if (f != 0)
6c0896abbbd4 (XTread_socket): Fix previous change in case F == 0.
Karl Heuer <kwzh@gnu.org>
parents: 23684
diff changeset
10048 f->mouse_moved = 0;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10049
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
10050 if (!tool_bar_p)
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
10051 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
10052 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10053 else
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10054 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10055 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
10056 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10057
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10058 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
10059 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10060 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
10061 bufp++;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10062 count++;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10063 numchars--;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10064 }
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10065
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10066 #ifdef USE_X_TOOLKIT
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10067 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
10068 /* For a down-event in the menu bar,
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10069 don't pass it to Xt right now.
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10070 Instead, save it away
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10071 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
10072 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
10073 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
10074 /* 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
10075 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
10076 && event.xbutton.x >= 0
21b6b8f50143 (XTread_socket): Verify a ButtonPress was actually in the
Richard M. Stallman <rms@gnu.org>
parents: 13507
diff changeset
10077 && 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
10078 && event.xbutton.y >= 0
21b6b8f50143 (XTread_socket): Verify a ButtonPress was actually in the
Richard M. Stallman <rms@gnu.org>
parents: 13507
diff changeset
10079 && 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
10080 && event.xbutton.same_screen)
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10081 {
15711
099dc465c948 (SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents: 15639
diff changeset
10082 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
10083 XSETFRAME (last_mouse_press_frame, f);
15793
fc460a98a7f9 (last_mouse_press_frame): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 15711
diff changeset
10084 }
15803
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
10085 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
10086 {
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
10087 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
10088 goto OTHER;
15803
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
10089 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10090
15803
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
10091 #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
10092 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
10093 else if (event.type == ButtonRelease)
fc460a98a7f9 (last_mouse_press_frame): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 15711
diff changeset
10094 {
15803
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
10095 if (!NILP (last_mouse_press_frame))
15794
c741a26258ce Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 15793
diff changeset
10096 {
15803
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
10097 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
10098 if (f->output_data.x)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10099 SET_SAVED_BUTTON_EVENT;
15794
c741a26258ce Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 15793
diff changeset
10100 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10101 else
15808
3afa38a18102 (XTread_socket): Delete the code to pass menu bar keys
Richard M. Stallman <rms@gnu.org>
parents: 15806
diff changeset
10102 goto OTHER;
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10103 }
15803
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
10104 #endif /* USE_MOTIF */
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10105 else
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10106 goto OTHER;
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10107 #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
10108 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10109 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10110
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10111 case CirculateNotify:
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10112 goto OTHER;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
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 case CirculateRequest:
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10115 goto OTHER;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10116
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10117 case VisibilityNotify:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10118 goto OTHER;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10119
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10120 case MappingNotify:
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10121 /* 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
10122 local cache. */
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10123 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
10124 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10125 case MappingModifier:
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10126 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
10127 /* 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
10128 case MappingKeyboard:
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10129 XRefreshKeyboardMapping (&event.xmapping);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10130 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10131 goto OTHER;
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 default:
13898
dceb33c07f9e (XTread_socket): Pass KeyPress events to the toolkit.
Richard M. Stallman <rms@gnu.org>
parents: 13884
diff changeset
10134 OTHER:
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10135 #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
10136 BLOCK_INPUT;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10137 XtDispatchEvent (&event);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10138 UNBLOCK_INPUT;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10139 #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
10140 break;
1436
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
10141 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10142 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10143 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10144
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10145 out:;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10146
8485
6e4b40c80021 (XTread_socket): Don't test X_IO_BUG; make that code unconditional.
Richard M. Stallman <rms@gnu.org>
parents: 8437
diff changeset
10147 /* 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
10148 when the window is destroyed. Detect that. (1994.) */
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
10149 if (! event_found)
7916
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
10150 {
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
10151 /* 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
10152 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
10153 B. Bretthauer, 1994 */
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
10154 x_noop_count++;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
10155 if (x_noop_count >= 100)
7916
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
10156 {
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
10157 x_noop_count=0;
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10158
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10159 if (next_noop_dpyinfo == 0)
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10160 next_noop_dpyinfo = x_display_list;
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10161
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10162 XNoOp (next_noop_dpyinfo->display);
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10163
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
10164 /* 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
10165 next_noop_dpyinfo = next_noop_dpyinfo->next;
7916
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
10166 }
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
10167 }
5753
eb44ecad5557 (XTread_socket): Add X_IO_BUG conditional.
Richard M. Stallman <rms@gnu.org>
parents: 5740
diff changeset
10168
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10169 /* 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
10170 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
10171 /* ??? 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
10172 if (pending_autoraise_frame)
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
10173 {
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
10174 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
10175 pending_autoraise_frame = 0;
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
10176 }
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
10177
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10178 UNBLOCK_INPUT;
30083
998d20abc885 (XTread_socket): Increment handling_signal at the start,
Gerd Moellmann <gerd@gnu.org>
parents: 30050
diff changeset
10179 --handling_signal;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10180 return count;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10181 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10182
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10183
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10184
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10185
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10186 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10187 Text Cursor
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10188 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10189
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10190 /* 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
10191 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
10192 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
10193 line after HPOS has been written. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10194
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10195 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10196 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
10197 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10198 int hpos, n;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10199 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10200 if (updated_area == TEXT_AREA
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10201 && 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
10202 && hpos <= w->phys_cursor.hpos
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10203 && (n < 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10204 || hpos + n > w->phys_cursor.hpos))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10205 w->phys_cursor_on_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10206 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10207
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10208
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10209 /* 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
10210 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
10211 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
10212 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
10213
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10214 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
10215 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
10216 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
10217
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10218 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10219 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
10220 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10221 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10222 GC gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10223 int whole_line_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10224 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10225 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
10226 XRectangle clip_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10227 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
10228
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10229 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
10230
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10231 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
10232 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
10233 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
10234 clip_rect.width = window_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10235 clip_rect.height = row->visible_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10236
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10237 /* If 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
10238 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
10239 if (whole_line_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10240 {
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
10241 clip_rect.x -= FRAME_X_LEFT_FLAGS_AREA_WIDTH (f);
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
10242 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
10243 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10244
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10245 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
10246 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10247
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10248
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10249 /* 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
10250
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10251 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10252 x_draw_hollow_cursor (w, row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10253 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10254 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10255 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10256 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
10257 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
10258 Display *dpy = FRAME_X_DISPLAY (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10259 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
10260 XGCValues xgcv;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10261 struct glyph *cursor_glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10262 GC gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10263
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10264 /* 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
10265 coordinates. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10266 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
10267 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
10268 + row->ascent - w->phys_cursor_ascent);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10269 h = row->height - 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10270
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10271 /* 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
10272 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
10273 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
10274 if (cursor_glyph == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10275 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10276
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10277 /* 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
10278 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
10279 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
10280 width instead. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10281 wd = cursor_glyph->pixel_width - 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10282 if (cursor_glyph->type == STRETCH_GLYPH
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10283 && !x_stretch_cursor_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10284 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
10285
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10286 /* 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
10287 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
10288 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
10289 if (dpyinfo->scratch_cursor_gc)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10290 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
10291 else
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10292 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
10293 GCForeground, &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10294 gc = dpyinfo->scratch_cursor_gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10295
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10296 /* 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
10297 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
10298 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
10299 XSetClipMask (dpy, gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10300 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10301
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10302
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10303 /* 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
10304
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10305 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
10306 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
10307 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
10308 --gerd. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10309
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10310 static void
28321
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10311 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
10312 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10313 struct glyph_row *row;
28321
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10314 int width;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10315 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10316 /* 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
10317 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
10318 glyphs and mini-buffer. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10319 if (w->phys_cursor.hpos < row->used[TEXT_AREA])
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10320 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10321 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10322 struct glyph *cursor_glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10323 GC gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10324 int x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10325 unsigned long mask;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10326 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10327 Display *dpy;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10328 Window window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10329
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10330 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
10331 if (cursor_glyph == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10332 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10333
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10334 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
10335 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
10336 xgcv.graphics_exposures = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10337 mask = GCForeground | GCBackground | GCGraphicsExposures;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10338 dpy = FRAME_X_DISPLAY (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10339 window = FRAME_X_WINDOW (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10340 gc = FRAME_X_DISPLAY_INFO (f)->scratch_cursor_gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10341
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10342 if (gc)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10343 XChangeGC (dpy, gc, mask, &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10344 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10345 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10346 gc = XCreateGC (dpy, window, mask, &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10347 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
10348 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10349
28321
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10350 if (width < 0)
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10351 width = f->output_data.x->cursor_width;
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10352
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10353 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
10354 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
10355 XFillRectangle (dpy, window, gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10356 x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10357 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
10358 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
10359 row->height);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10360 XSetClipMask (dpy, gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10361 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10362 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10363
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10364
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10365 /* 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
10366 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
10367 is is about to be rewritten. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10368
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10369 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10370 x_clear_cursor (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10371 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10372 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10373 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
10374 x_update_window_cursor (w, 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10375 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10376
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10377
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10378 /* 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
10379 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
10380
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10381 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10382 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
10383 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10384 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10385 enum draw_glyphs_face hl;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10386 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10387 /* 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
10388 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
10389 glyphs and mini-buffer. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10390 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
10391 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
10392 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
10393 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
10394 hl, 0, 0, 0);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
10395
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
10396 /* 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
10397 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
10398 are redrawn. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
10399 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
10400 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
10401 if (row > w->current_matrix->rows
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
10402 && MATRIX_ROW_OVERLAPS_SUCC_P (row - 1))
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
10403 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
10404
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
10405 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
10406 && MATRIX_ROW_OVERLAPS_PRED_P (row + 1))
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
10407 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
10408 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
10409 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10410 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10411
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10412
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10413 /* 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
10414
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10415 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10416 x_erase_phys_cursor (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10417 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10418 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10419 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10420 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
10421 int hpos = w->phys_cursor.hpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10422 int vpos = w->phys_cursor.vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10423 int mouse_face_here_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10424 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
10425 struct glyph_row *cursor_row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10426 struct glyph *cursor_glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10427 enum draw_glyphs_face hl;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10428
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10429 /* 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
10430 screen. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10431 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
10432 goto mark_cursor_off;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10433
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10434 /* 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
10435 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
10436 if (vpos >= active_glyphs->nrows)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10437 goto mark_cursor_off;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10438
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10439 /* 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
10440 can do. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10441 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
10442 if (!cursor_row->enabled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10443 goto mark_cursor_off;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10444
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10445 /* 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
10446 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
10447 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
10448 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
10449 cursor glyph at hand. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10450 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
10451 goto mark_cursor_off;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10452
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10453 /* 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
10454 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
10455 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
10456 && 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
10457 && (vpos > dpyinfo->mouse_face_beg_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10458 || (vpos == dpyinfo->mouse_face_beg_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10459 && hpos >= dpyinfo->mouse_face_beg_col))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10460 && (vpos < dpyinfo->mouse_face_end_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10461 || (vpos == dpyinfo->mouse_face_end_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10462 && hpos < dpyinfo->mouse_face_end_col))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10463 /* 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
10464 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
10465 mouse highlighting does not. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10466 && cursor_row->used[TEXT_AREA] > hpos)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10467 mouse_face_here_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10468
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10469 /* 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
10470 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
10471 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10472 int x;
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
10473 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
10474
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10475 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
10476 if (cursor_glyph == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10477 goto mark_cursor_off;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10478
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10479 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
10480
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10481 XClearArea (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10482 x,
25546
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
10483 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
10484 cursor_row->y)),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10485 cursor_glyph->pixel_width,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10486 cursor_row->visible_height,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10487 False);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10488 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10489
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10490 /* 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
10491 if (mouse_face_here_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10492 hl = DRAW_MOUSE_FACE;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10493 else if (cursor_row->inverse_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10494 hl = DRAW_INVERSE_VIDEO;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10495 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10496 hl = DRAW_NORMAL_TEXT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10497 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
10498
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10499 mark_cursor_off:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10500 w->phys_cursor_on_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10501 w->phys_cursor_type = NO_CURSOR;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10502 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10503
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 /* 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
10506 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
10507 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
10508
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10509 void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10510 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
10511 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10512 int on, hpos, vpos, x, y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10513 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10514 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10515 int new_cursor_type;
28321
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10516 int new_cursor_width;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10517 struct glyph_matrix *current_glyphs;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10518 struct glyph_row *glyph_row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10519 struct glyph *glyph;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10520
2235
80e0d36bbb77 * xterm.c (x_display_box_cursor, x_display_bar_cursor): Don't
Jim Blandy <jimb@redhat.com>
parents: 2195
diff changeset
10521 /* 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
10522 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
10523 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
10524 window. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10525 if (! FRAME_VISIBLE_P (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10526 || FRAME_GARBAGED_P (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10527 || vpos >= w->current_matrix->nrows
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10528 || hpos >= w->current_matrix->matrix_w)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10529 return;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10530
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10531 /* 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
10532 if (!on && !w->phys_cursor_on_p)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10533 return;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10534
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10535 current_glyphs = w->current_matrix;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10536 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
10537 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
10538
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10539 /* 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
10540 display the cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10541 if (!glyph_row->enabled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10542 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10543 w->phys_cursor_on_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10544 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10545 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10546
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10547 xassert (interrupt_input_blocked);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10548
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10549 /* 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
10550 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
10551 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
10552 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
10553 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
10554 box cursor. */
28321
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10555 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
10556 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
10557 && 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
10558 && 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
10559 {
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10560 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
10561 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
10562 else
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10563 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
10564 }
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10565 else
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10566 {
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10567 if (w != XWINDOW (selected_window)
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10568 || f != FRAME_X_DISPLAY_INFO (f)->x_highlight_frame)
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10569 {
27844
72e15185eeb5 (x_display_and_set_cursor): Display cursor of
Gerd Moellmann <gerd@gnu.org>
parents: 27619
diff changeset
10570 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
10571
72e15185eeb5 (x_display_and_set_cursor): Display cursor of
Gerd Moellmann <gerd@gnu.org>
parents: 27619
diff changeset
10572 if (MINI_WINDOW_P (w) || !cursor_in_non_selected_windows)
25191
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10573 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
10574 else
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10575 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
10576 }
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10577 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
10578 new_cursor_type = NO_CURSOR;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10579 else
28321
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10580 {
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10581 struct buffer *b = XBUFFER (w->buffer);
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10582
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10583 if (EQ (b->cursor_type, Qt))
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10584 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
10585 else
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10586 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
10587 &new_cursor_width);
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10588 }
25191
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10589 }
24991
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 /* 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
10592 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
10593 erase it. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10594 if (w->phys_cursor_on_p
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10595 && (!on
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10596 || w->phys_cursor.x != x
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10597 || w->phys_cursor.y != y
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10598 || 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
10599 x_erase_phys_cursor (w);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10600
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10601 /* 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
10602 display it. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10603 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
10604 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10605 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
10606 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
10607
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10608 /* 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
10609 of them may need the information. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10610 w->phys_cursor.x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10611 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
10612 w->phys_cursor.hpos = hpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10613 w->phys_cursor.vpos = vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10614 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
10615 w->phys_cursor_on_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10616
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10617 switch (new_cursor_type)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10618 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10619 case HOLLOW_BOX_CURSOR:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10620 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
10621 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10622
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10623 case FILLED_BOX_CURSOR:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10624 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
10625 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10626
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10627 case BAR_CURSOR:
28321
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
10628 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
10629 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10630
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10631 case NO_CURSOR:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10632 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10633
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10634 default:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10635 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10636 }
27619
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10637
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
10638 #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
10639 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
10640 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
10641 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
10642 #endif
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10643 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10644
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10645 #ifndef XFlush
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10646 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
10647 XFlush (FRAME_X_DISPLAY (f));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10648 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10649 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10650
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10651
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10652 /* 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
10653 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
10654 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
10655 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
10656 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
10657
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
10658 void
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10659 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
10660 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10661 int on, hpos, vpos, x, y;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10662 {
5872
6389c826f847 (x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents: 5825
diff changeset
10663 BLOCK_INPUT;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10664 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
10665 UNBLOCK_INPUT;
80a5aedfb4c7 (XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents: 12192
diff changeset
10666 }
80a5aedfb4c7 (XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents: 12192
diff changeset
10667
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10668
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10669 /* 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
10670 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
10671
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
10672 void
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10673 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
10674 struct frame *f;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10675 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10676 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
10677 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10678
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10679
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10680 /* 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
10681 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
10682
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10683 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10684 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
10685 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10686 int on_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10687 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10688 while (w)
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 if (!NILP (w->hchild))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10691 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
10692 else if (!NILP (w->vchild))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10693 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
10694 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10695 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
10696
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10697 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
10698 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10699 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10700
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10701
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10702 /* 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
10703 of ON. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10704
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10705 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10706 x_update_window_cursor (w, on)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10707 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
10708 int on;
80a5aedfb4c7 (XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents: 12192
diff changeset
10709 {
28183
7d97c6fbc3d9 (x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents: 28142
diff changeset
10710 /* 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
10711 of being deleted. */
7d97c6fbc3d9 (x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents: 28142
diff changeset
10712 if (w->current_matrix)
7d97c6fbc3d9 (x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents: 28142
diff changeset
10713 {
7d97c6fbc3d9 (x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents: 28142
diff changeset
10714 BLOCK_INPUT;
7d97c6fbc3d9 (x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents: 28142
diff changeset
10715 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
10716 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
10717 UNBLOCK_INPUT;
7d97c6fbc3d9 (x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents: 28142
diff changeset
10718 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10719 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10720
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10721
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10722
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10723
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10724 /* Icons. */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10725
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10726 /* 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
10727 when we get an expose event for it. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10728
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
10729 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10730 refreshicon (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10731 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10732 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10733 /* Normally, the window manager handles this function. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10734 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10735
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10736 /* Make the x-window of frame F use the gnu icon bitmap. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10737
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10738 int
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
10739 x_bitmap_icon (f, file)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10740 struct frame *f;
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
10741 Lisp_Object file;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10742 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10743 int bitmap_id;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10744
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
10745 if (FRAME_X_WINDOW (f) == 0)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10746 return 1;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10747
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
10748 /* 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
10749 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
10750 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
10751 f->output_data.x->icon_bitmap = 0;
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
10752
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
10753 if (STRINGP (file))
9542
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
10754 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
10755 else
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
10756 {
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
10757 /* 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
10758 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
10759 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
10760 = 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
10761 gnu_width, gnu_height);
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
10762
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
10763 /* 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
10764 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
10765 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
10766 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
10767 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
10768
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
10769 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
10770 }
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
10771
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
10772 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
10773 f->output_data.x->icon_bitmap = bitmap_id;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10774
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10775 return 0;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10776 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10777
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10778
12074
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
10779 /* 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
10780 Use ICON_NAME as the text. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10781
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10782 int
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10783 x_text_icon (f, icon_name)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10784 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10785 char *icon_name;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10786 {
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
10787 if (FRAME_X_WINDOW (f) == 0)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10788 return 1;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10789
12074
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
10790 #ifdef HAVE_X11R4
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
10791 {
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
10792 XTextProperty text;
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
10793 text.value = (unsigned char *) icon_name;
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
10794 text.encoding = XA_STRING;
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
10795 text.format = 8;
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
10796 text.nitems = strlen (icon_name);
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
10797 #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
10798 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
10799 &text);
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
10800 #else /* not USE_X_TOOLKIT */
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
10801 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
10802 #endif /* not USE_X_TOOLKIT */
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
10803 }
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
10804 #else /* not HAVE_X11R4 */
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
10805 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
10806 #endif /* not HAVE_X11R4 */
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
10807
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
10808 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
10809 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
10810 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
10811 x_wm_set_icon_pixmap (f, 0);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10812
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10813 return 0;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10814 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10815
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10816 #define X_ERROR_MESSAGE_SIZE 200
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10817
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10818 /* If non-nil, this should be a string.
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10819 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
10820
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10821 static Lisp_Object x_error_message_string;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10822
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10823 /* 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
10824 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
10825 x_catch_errors is in effect. */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10826
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10827 static void
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10828 x_error_catcher (display, error)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10829 Display *display;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10830 XErrorEvent *error;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10831 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10832 XGetErrorText (display, error->error_code,
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10833 XSTRING (x_error_message_string)->data,
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10834 X_ERROR_MESSAGE_SIZE);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10835 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10836
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10837 /* 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
10838 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
10839 operating on.
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10840
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10841 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
10842 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
10843 stored in x_error_message_string.
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10844
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10845 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
10846 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
10847
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10848 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
10849
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10850 void x_check_errors ();
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10851 static Lisp_Object x_catch_errors_unwind ();
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10852
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10853 int
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10854 x_catch_errors (dpy)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10855 Display *dpy;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10856 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10857 int count = specpdl_ptr - specpdl;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10858
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10859 /* 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
10860 XSync (dpy, False);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10861
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10862 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
10863
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10864 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
10865 XSTRING (x_error_message_string)->data[0] = 0;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10866
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10867 return count;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10868 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10869
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10870 /* 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
10871
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10872 static Lisp_Object
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10873 x_catch_errors_unwind (old_val)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10874 Lisp_Object old_val;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10875 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10876 x_error_message_string = old_val;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10877 return Qnil;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10878 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10879
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10880 /* 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
10881 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
10882 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
10883
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10884 void
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10885 x_check_errors (dpy, format)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10886 Display *dpy;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10887 char *format;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10888 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10889 /* 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
10890 XSync (dpy, False);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10891
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10892 if (XSTRING (x_error_message_string)->data[0])
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10893 error (format, XSTRING (x_error_message_string)->data);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10894 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10895
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10896 /* 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
10897 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
10898
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10899 int
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10900 x_had_errors_p (dpy)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10901 Display *dpy;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10902 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10903 /* 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
10904 XSync (dpy, False);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10905
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10906 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
10907 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10908
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10909 /* 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
10910
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10911 void
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10912 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
10913 Display *dpy;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10914 {
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10915 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
10916 }
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10917
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10918 /* 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
10919 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
10920 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
10921 the corresponding call to x_catch_errors. */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10922
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10923 void
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10924 x_uncatch_errors (dpy, count)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10925 Display *dpy;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10926 int count;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10927 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10928 unbind_to (count, Qnil);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10929 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10930
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10931 #if 0
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10932 static unsigned int x_wire_count;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10933 x_trace_wire ()
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10934 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10935 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
10936 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10937 #endif /* ! 0 */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10938
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10939
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10940 /* 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
10941 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
10942 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
10943 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
10944 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
10945
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10946 static SIGTYPE
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10947 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
10948 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
10949 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10950 #ifdef USG
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10951 /* USG systems forget handlers when they are used;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10952 must reestablish each time */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10953 signal (signalnum, x_connection_signal);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10954 #endif /* USG */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10955 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10956
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 555
diff changeset
10957 /* Handling X errors. */
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 555
diff changeset
10958
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10959 /* Handle the loss of connection to display DISPLAY. */
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
10960
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 555
diff changeset
10961 static SIGTYPE
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10962 x_connection_closed (display, error_message)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10963 Display *display;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10964 char *error_message;
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 555
diff changeset
10965 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10966 struct x_display_info *dpyinfo = x_display_info_for_display (display);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10967 Lisp_Object frame, tail;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10968
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
10969 /* Indicate that this display is dead. */
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
10970
28030
c5b68e855d56 (x_connection_closed) [USE_X_TOOLKIT]: Don't try to
Gerd Moellmann <gerd@gnu.org>
parents: 27991
diff changeset
10971 #if 0 /* Closing the display caused a bus error on OpenWindows. */
17825
281d99590839 (dumpglyphs): Draw glyphs one by one if the font for
Kenichi Handa <handa@m17n.org>
parents: 17720
diff changeset
10972 #ifdef USE_X_TOOLKIT
16179
7f8ce4d3e955 (x_connection_closed): Call XtCloseDisplay.
Richard M. Stallman <rms@gnu.org>
parents: 16104
diff changeset
10973 XtCloseDisplay (display);
17825
281d99590839 (dumpglyphs): Draw glyphs one by one if the font for
Kenichi Handa <handa@m17n.org>
parents: 17720
diff changeset
10974 #endif
28030
c5b68e855d56 (x_connection_closed) [USE_X_TOOLKIT]: Don't try to
Gerd Moellmann <gerd@gnu.org>
parents: 27991
diff changeset
10975 #endif
16179
7f8ce4d3e955 (x_connection_closed): Call XtCloseDisplay.
Richard M. Stallman <rms@gnu.org>
parents: 16104
diff changeset
10976
29536
4def8a9e785a * xterm.c (x_connection_closed): If dpyinfo is NULL, don't try to
Ken Raeburn <raeburn@raeburn.org>
parents: 29512
diff changeset
10977 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
10978 dpyinfo->display = 0;
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
10979
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10980 /* 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
10981 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
10982 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
10983 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10984 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
10985 minibuf_frame
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10986 = 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
10987 if (FRAME_X_P (XFRAME (frame))
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
10988 && FRAME_X_P (XFRAME (minibuf_frame))
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
10989 && ! EQ (frame, minibuf_frame)
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
10990 && 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
10991 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
10992 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10993
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10994 /* 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
10995 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
10996 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
10997 FOR_EACH_FRAME (tail, frame)
10921
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
10998 if (FRAME_X_P (XFRAME (frame))
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
10999 && 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
11000 {
0d37c1e81c0d (x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents: 11901
diff changeset
11001 /* 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
11002 trying to find a replacement. */
0d37c1e81c0d (x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents: 11901
diff changeset
11003 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
11004 Fdelete_frame (frame, Qt);
0d37c1e81c0d (x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents: 11901
diff changeset
11005 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11006
13727
9eb09adbcb38 (x_connection_closed): Don't delete dpyinfo if it's null.
Karl Heuer <kwzh@gnu.org>
parents: 13633
diff changeset
11007 if (dpyinfo)
9eb09adbcb38 (x_connection_closed): Don't delete dpyinfo if it's null.
Karl Heuer <kwzh@gnu.org>
parents: 13633
diff changeset
11008 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
11009
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11010 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
11011 {
15515
69257ac25af4 (x_connection_closed): Add newline when printing error message on stderr.
Richard M. Stallman <rms@gnu.org>
parents: 15514
diff changeset
11012 fprintf (stderr, "%s\n", error_message);
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11013 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
11014 exit (70);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11015 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11016
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11017 /* 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
11018 #ifdef SIGIO
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11019 sigunblock (sigmask (SIGIO));
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11020 #endif
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11021 sigunblock (sigmask (SIGALRM));
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11022 TOTALLY_UNBLOCK_INPUT;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11023
15526
926ef4afc174 (x_connection_closed): Call clear_waiting_for_input.
Richard M. Stallman <rms@gnu.org>
parents: 15521
diff changeset
11024 clear_waiting_for_input ();
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11025 error ("%s", error_message);
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 555
diff changeset
11026 }
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 555
diff changeset
11027
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11028 /* 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
11029 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
11030 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
11031
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11032 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
11033 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
11034 Display *display;
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
11035 XErrorEvent *error;
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
11036 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11037 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
11038
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
11039 /* 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
11040 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
11041
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
11042 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
11043 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
11044 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
11045 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
11046 }
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
11047
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11048 /* 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
11049 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
11050
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11051 static int
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11052 x_error_handler (display, error)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11053 Display *display;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11054 XErrorEvent *error;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11055 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11056 if (! NILP (x_error_message_string))
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11057 x_error_catcher (display, error);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11058 else
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11059 x_error_quitter (display, error);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11060 return 0;
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11061 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
11062
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11063 /* 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
11064 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
11065 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
11066
1875
f569bc4e9b8f * xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents: 1841
diff changeset
11067 static int
f569bc4e9b8f * xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents: 1841
diff changeset
11068 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
11069 Display *display;
f569bc4e9b8f * xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents: 1841
diff changeset
11070 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11071 char buf[256];
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11072
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11073 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
11074 x_connection_closed (display, buf);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11075 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
11076 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
11077
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
11078 /* 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
11079
8291
9c6ddd14996b (struct font_info): New field full_name.
Richard M. Stallman <rms@gnu.org>
parents: 8279
diff changeset
11080 /* 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
11081 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
11082 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
11083 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
11084
3076
e3b3c67cf203 Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents: 3066
diff changeset
11085 Lisp_Object
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11086 x_new_font (f, fontname)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11087 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11088 register char *fontname;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11089 {
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11090 struct font_info *fontp
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
11091 = 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
11092
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11093 if (!fontp)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11094 return Qnil;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11095
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11096 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
11097 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
11098 f->output_data.x->fontset = -1;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11099
9167
8ad448b29c1c (x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents: 9101
diff changeset
11100 /* 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
11101 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
11102 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11103 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
11104 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
11105 }
8ad448b29c1c (x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents: 9101
diff changeset
11106 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
11107 {
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
11108 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
11109 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
11110 }
9167
8ad448b29c1c (x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents: 9101
diff changeset
11111
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11112 /* 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
11113 if (FRAME_X_WINDOW (f) != 0)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11114 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11115 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
11116 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
11117 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
11118 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
11119 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
11120 f->output_data.x->font->fid);
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11121
6767
8fbcee1c2059 (stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents: 6757
diff changeset
11122 frame_update_line_height (f);
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
11123 x_set_window_size (f, 0, f->width, f->height);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11124 }
6767
8fbcee1c2059 (stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents: 6757
diff changeset
11125 else
8fbcee1c2059 (stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents: 6757
diff changeset
11126 /* 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
11127 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
11128 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
11129
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11130 return build_string (fontp->full_name);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11131 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11132
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11133 /* 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
11134 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
11135 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
11136 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
11137
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11138 Lisp_Object
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11139 x_new_fontset (f, fontsetname)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11140 struct frame *f;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11141 char *fontsetname;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11142 {
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
11143 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
11144 Lisp_Object result;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11145
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11146 if (fontset < 0)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11147 return Qnil;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11148
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
11149 if (f->output_data.x->fontset == fontset)
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
11150 /* 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
11151 to do. */
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
11152 return fontset_name (fontset);
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
11153
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
11154 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
11155
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11156 if (!STRINGP (result))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11157 /* Can't load ASCII font. */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11158 return Qnil;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11159
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11160 /* 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
11161 f->output_data.x->fontset = fontset;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11162
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11163 #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
11164 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
11165 && (FRAME_XIC_STYLE (f) & (XIMPreeditPosition | XIMStatusArea)))
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
11166 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
11167 #endif
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11168
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11169 return build_string (fontsetname);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11170 }
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11171
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11172
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11173 /***********************************************************************
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11174 X Input Methods
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11175 ***********************************************************************/
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11176
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11177 #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
11178
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11179 #ifdef HAVE_X11R6
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11180
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11181 /* 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
11182 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
11183 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
11184
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11185 static void
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11186 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
11187 XIM xim;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11188 XPointer client_data;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11189 XPointer call_data;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11190 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11191 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
11192 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
11193
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11194 BLOCK_INPUT;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11195
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11196 /* 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
11197 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
11198 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11199 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
11200 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
11201 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11202 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
11203 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
11204 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11205 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
11206 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
11207 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11208 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11209 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11210
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11211 /* 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
11212 dpyinfo->xim = NULL;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11213 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
11214 UNBLOCK_INPUT;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11215 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11216
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11217 #endif /* HAVE_X11R6 */
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11218
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11219 /* 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
11220 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
11221
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11222 static void
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11223 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
11224 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
11225 char *resource_name;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11226 {
29948
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
11227 #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
11228 XIM xim;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11229
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11230 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
11231 dpyinfo->xim = xim;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11232
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11233 if (xim)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11234 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11235 #ifdef HAVE_X11R6
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11236 XIMCallback destroy;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11237 #endif
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11238
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11239 /* 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
11240 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
11241
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11242 #ifdef HAVE_X11R6
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11243 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
11244 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
11245 /* 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
11246 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
11247 #endif
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11248 }
29948
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
11249
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
11250 #else /* not USE_XIM */
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
11251 dpyinfo->xim = NULL;
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
11252 #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
11253 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11254
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11255
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
11256 #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
11257
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11258 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
11259 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11260 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
11261 char *resource_name;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11262 };
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11263
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11264 /* 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
11265 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
11266 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
11267 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
11268
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11269 static void
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11270 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
11271 Display *display;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11272 XPointer client_data;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11273 XPointer call_data;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11274 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11275 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
11276 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
11277
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11278 /* 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
11279 if (dpyinfo->xim)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11280 return;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11281
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11282 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
11283
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11284 /* 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
11285 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
11286 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
11287 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11288 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
11289
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11290 BLOCK_INPUT;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11291 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
11292 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11293 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
11294
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11295 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
11296 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
11297 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11298 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
11299 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
11300 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
11301 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
11302 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11303 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
11304 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
11305 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11306 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11307 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11308
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11309 UNBLOCK_INPUT;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11310 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11311 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11312
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
11313 #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
11314
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11315
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11316 /* 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
11317 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
11318 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
11319 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
11320
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11321 static void
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11322 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
11323 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
11324 char *resource_name;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11325 {
29948
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
11326 #ifdef USE_XIM
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
11327 #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
11328 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
11329 int len;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11330
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11331 dpyinfo->xim = NULL;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11332 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
11333 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
11334 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
11335 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
11336 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
11337 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
11338 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
11339 xim_instantiate_callback,
29435
28c6b6d0ed6b (x_calc_absolute_position): Declare nchildren unsigned.
Dave Love <fx@gnu.org>
parents: 29393
diff changeset
11340 /* Fixme: This is XPointer in
28c6b6d0ed6b (x_calc_absolute_position): Declare nchildren unsigned.
Dave Love <fx@gnu.org>
parents: 29393
diff changeset
11341 XFree86 but (XPointer *) on
28c6b6d0ed6b (x_calc_absolute_position): Declare nchildren unsigned.
Dave Love <fx@gnu.org>
parents: 29393
diff changeset
11342 Tru64, at least. */
28c6b6d0ed6b (x_calc_absolute_position): Declare nchildren unsigned.
Dave Love <fx@gnu.org>
parents: 29393
diff changeset
11343 (XPointer) xim_inst);
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
11344 #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
11345 dpyinfo->xim = NULL;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11346 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
11347 #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
11348
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
11349 #else /* not USE_XIM */
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
11350 dpyinfo->xim = NULL;
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
11351 #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
11352 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11353
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11354
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11355 /* 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
11356
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11357 static void
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11358 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
11359 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
11360 {
29948
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
11361 #ifdef USE_XIM
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
11362 #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
11363 XUnregisterIMInstantiateCallback (dpyinfo->display, dpyinfo->xrdb,
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11364 NULL, EMACS_CLASS,
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11365 xim_instantiate_callback, NULL);
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
11366 #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
11367 XCloseIM (dpyinfo->xim);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11368 dpyinfo->xim = NULL;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11369 XFree (dpyinfo->xim_styles);
29948
bf5da5d2d690 (xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents: 29894
diff changeset
11370 #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
11371 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11372
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
11373 #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
11374
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
11375
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11376
14826
eec0abb31126 Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 14801
diff changeset
11377 /* Calculate the absolute position in frame F
eec0abb31126 Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 14801
diff changeset
11378 from its current recorded position values and gravity. */
eec0abb31126 Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 14801
diff changeset
11379
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
11380 void
7264
a701bffa0f9d (x_calc_absolute_position): Use size_hint_flags.
Richard M. Stallman <rms@gnu.org>
parents: 7262
diff changeset
11381 x_calc_absolute_position (f)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11382 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11383 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11384 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
11385 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
11386 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
11387 int this_window;
507a45c7e911 (x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents: 11807
diff changeset
11388
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11389 /* 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
11390 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
11391 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
11392 return;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11393
11896
507a45c7e911 (x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents: 11807
diff changeset
11394 #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
11395 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
11396 #else
507a45c7e911 (x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents: 11807
diff changeset
11397 this_window = FRAME_X_WINDOW (f);
507a45c7e911 (x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents: 11807
diff changeset
11398 #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
11399
70247ce8b381 (x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents: 4493
diff changeset
11400 /* 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
11401 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
11402 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
11403 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
11404 {
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11405 int count;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11406
4630
70247ce8b381 (x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents: 4493
diff changeset
11407 BLOCK_INPUT;
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11408 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
11409 while (1)
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11410 {
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11411 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
11412 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
11413
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11414 /* 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
11415 this_window,
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11416 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
11417
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11418 /* 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
11419 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
11420
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11421 /* Child of win. */
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11422 &child);
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11423 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
11424 {
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11425 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
11426 Window *newchildren;
29435
28c6b6d0ed6b (x_calc_absolute_position): Declare nchildren unsigned.
Dave Love <fx@gnu.org>
parents: 29393
diff changeset
11427 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
11428
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11429 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
11430 &newparent, &newchildren, &nchildren))
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11431 break;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11432
23107
44eda932afcf (x_calc_absolute_position): Cast argument to XFree, in
Karl Heuer <kwzh@gnu.org>
parents: 23095
diff changeset
11433 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
11434
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11435 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
11436 }
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11437 else
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11438 break;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11439 }
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11440
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11441 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
11442 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
11443 }
70247ce8b381 (x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents: 4493
diff changeset
11444
70247ce8b381 (x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents: 4493
diff changeset
11445 /* 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
11446 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
11447 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
11448 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
11449 - 2 * f->output_data.x->border_width - win_x
eec0abb31126 Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 14801
diff changeset
11450 - PIXEL_WIDTH (f)
eec0abb31126 Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 14801
diff changeset
11451 + f->output_data.x->left_pos);
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11452
7262
68fc80bf10df (x_wm_set_size_hint): Don't try to handle negative positions.
Richard M. Stallman <rms@gnu.org>
parents: 7210
diff changeset
11453 if (flags & YNegative)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11454 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11455 int menubar_height = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11456
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11457 #ifdef USE_X_TOOLKIT
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11458 if (f->output_data.x->menubar_widget)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11459 menubar_height
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11460 = (f->output_data.x->menubar_widget->core.height
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11461 + f->output_data.x->menubar_widget->core.border_width);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11462 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11463
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11464 f->output_data.x->top_pos = (FRAME_X_DISPLAY_INFO (f)->height
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11465 - 2 * f->output_data.x->border_width
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11466 - win_y
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11467 - PIXEL_HEIGHT (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11468 - menubar_height
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11469 + f->output_data.x->top_pos);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11470 }
14826
eec0abb31126 Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 14801
diff changeset
11471
7409
fe56a02838ba (x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents: 7346
diff changeset
11472 /* 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
11473 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
11474 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
11475 f->output_data.x->size_hint_flags &= ~ (XNegative | YNegative);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11476 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11477
7409
fe56a02838ba (x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents: 7346
diff changeset
11478 /* 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
11479 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
11480 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
11481 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
11482 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
11483
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
11484 void
6934
e0ab4f59004e (dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents: 6883
diff changeset
11485 x_set_offset (f, xoff, yoff, change_gravity)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11486 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11487 register int xoff, yoff;
6934
e0ab4f59004e (dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents: 6883
diff changeset
11488 int change_gravity;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11489 {
11901
8ecc60a02138 (x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents: 11896
diff changeset
11490 int modified_top, modified_left;
8ecc60a02138 (x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents: 11896
diff changeset
11491
11988
a1ce6f699967 (x_set_offset): Distinguish CHANGE_GRAVITY < 0 case.
Karl Heuer <kwzh@gnu.org>
parents: 11953
diff changeset
11492 if (change_gravity > 0)
7409
fe56a02838ba (x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents: 7346
diff changeset
11493 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11494 f->output_data.x->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
11495 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
11496 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
11497 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
11498 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
11499 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
11500 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
11501 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
11502 }
7264
a701bffa0f9d (x_calc_absolute_position): Use size_hint_flags.
Richard M. Stallman <rms@gnu.org>
parents: 7262
diff changeset
11503 x_calc_absolute_position (f);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11504
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11505 BLOCK_INPUT;
11915
e2ab839155e1 (XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents: 11904
diff changeset
11506 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
11507
17519
5aa7011aa3d5 (x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents: 17371
diff changeset
11508 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
11509 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
11510 #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
11511 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
11512 /* 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
11513 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
11514 if (change_gravity != 0)
11901
8ecc60a02138 (x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents: 11896
diff changeset
11515 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11516 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
11517 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
11518 }
17519
5aa7011aa3d5 (x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents: 17371
diff changeset
11519 #endif
11901
8ecc60a02138 (x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents: 11896
diff changeset
11520
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
11521 #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
11522 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
11523 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
11524 #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
11525 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
11526 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
11527 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11528 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11529 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11530
5825
b1f35db748d8 (x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 5753
diff changeset
11531 /* Call this to change the size of frame F's x-window.
b1f35db748d8 (x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 5753
diff changeset
11532 If CHANGE_GRAVITY is 1, we change to top-left-corner window gravity
b1f35db748d8 (x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 5753
diff changeset
11533 for this size change and subsequent size changes.
b1f35db748d8 (x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 5753
diff changeset
11534 Otherwise we leave the window gravity unchanged. */
b1f35db748d8 (x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 5753
diff changeset
11535
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
11536 void
5825
b1f35db748d8 (x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 5753
diff changeset
11537 x_set_window_size (f, change_gravity, cols, rows)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11538 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
11539 int change_gravity;
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
11540 int cols, rows;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11541 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11542 #ifndef USE_X_TOOLKIT
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11543 int pixelwidth, pixelheight;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11544 #endif
14692
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
11545
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
11546 BLOCK_INPUT;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11547
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
11548 #ifdef USE_X_TOOLKIT
7415
fbea5637a4b4 (x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents: 7409
diff changeset
11549 {
fbea5637a4b4 (x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents: 7409
diff changeset
11550 /* The x and y position of the widget is clobbered by the
fbea5637a4b4 (x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents: 7409
diff changeset
11551 call to XtSetValues within EmacsFrameSetCharSize.
fbea5637a4b4 (x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents: 7409
diff changeset
11552 This is a real kludge, but I don't understand Xt so I can't
fbea5637a4b4 (x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents: 7409
diff changeset
11553 figure out a correct fix. Can anyone else tell me? -- rms. */
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11554 int xpos = f->output_data.x->widget->core.x;
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11555 int ypos = f->output_data.x->widget->core.y;
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11556 EmacsFrameSetCharSize (f->output_data.x->edit_widget, cols, rows);
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11557 f->output_data.x->widget->core.x = xpos;
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11558 f->output_data.x->widget->core.y = ypos;
7415
fbea5637a4b4 (x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents: 7409
diff changeset
11559 }
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
11560
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
11561 #else /* not USE_X_TOOLKIT */
0c351de98a26 (x_set_window_size): Add USE_X_TOOLKIT conditional. Call EmacsFrameSetCharSize and return.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 5685
diff changeset
11562
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
11563 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
11564 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
11565 = (!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
11566 ? 0
8ad448b29c1c (x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents: 9101
diff changeset
11567 : 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
11568 ? 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
11569 : (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
11570 f->output_data.x->flags_areas_extra
25465
1b6d98e8c3ac Remove unused bitmaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25391
diff changeset
11571 = 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
11572 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
11573 pixelheight = CHAR_TO_PIXEL_HEIGHT (f, rows);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11574
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11575 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
11576 x_wm_set_size_hint (f, (long) 0, 0);
8781
98741404d3e0 Delete X11 conditionals.
Richard M. Stallman <rms@gnu.org>
parents: 8724
diff changeset
11577
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
11578 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
11579 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
11580 pixelwidth, pixelheight);
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
11581
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
11582 /* 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
11583 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
11584 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
11585 ConfigureNotify event gets here.
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
11586
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
11587 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
11588 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
11589 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
11590 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
11591 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
11592
1c02364724aa (x_set_window_size): When calling change_frame_size, specify 1 for DELAY.
Richard M. Stallman <rms@gnu.org>
parents: 25101
diff changeset
11593 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
11594 a BLOCK_INPUT. */
25360
2f3ad0a21be5 Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents: 25328
diff changeset
11595 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
11596 PIXEL_WIDTH (f) = pixelwidth;
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
11597 PIXEL_HEIGHT (f) = pixelheight;
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
11598
14692
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
11599 /* 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
11600 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
11601 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
11602 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
11603 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
11604
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
11605 XFlush (FRAME_X_DISPLAY (f));
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
11606
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
11607 #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
11608
7651
1569a13efdcd (x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents: 7602
diff changeset
11609 /* 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
11610 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
11611
14692
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
11612 /* 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
11613 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
11614 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
11615 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
11616 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
11617
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11618 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11619 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11620
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
11621 /* Mouse warping. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11622
7026
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
11623 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11624 x_set_mouse_position (f, x, y)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11625 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11626 int x, y;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11627 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11628 int pix_x, pix_y;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11629
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11630 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
11631 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
11632
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
11633 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
11634 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
11635
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
11636 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
11637 if (pix_y > PIXEL_HEIGHT (f)) pix_y = PIXEL_HEIGHT (f);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11638
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11639 BLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11640
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
11641 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
11642 0, 0, 0, 0, pix_x, pix_y);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11643 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11644 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11645
7026
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
11646 /* 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
11647
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
11648 void
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
11649 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
11650 struct frame *f;
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
11651 int pix_x, pix_y;
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
11652 {
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
11653 BLOCK_INPUT;
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
11654
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
11655 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
11656 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
11657 UNBLOCK_INPUT;
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
11658 }
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
11659
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
11660 /* focus shifting, raising and lowering. */
7026
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
11661
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
11662 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11663 x_focus_on_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11664 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11665 {
5156
fd78458b8c43 (XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents: 5018
diff changeset
11666 #if 0 /* This proves to be unpleasant. */
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11667 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
11668 #endif
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
11669 #if 0
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
11670 /* 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
11671 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
11672 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
11673 XSetInputFocus (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11674 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
11675 #endif /* ! 0 */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11676 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11677
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
11678 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11679 x_unfocus_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11680 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11681 {
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
11682 #if 0
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11683 /* 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
11684 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
11685 XSetInputFocus (FRAME_X_DISPLAY (f), PointerRoot,
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11686 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
11687 #endif /* ! 0 */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11688 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11689
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11690 /* Raise frame F. */
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11691
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
11692 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11693 x_raise_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11694 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11695 {
1658
452ba03935d7 * xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents: 1530
diff changeset
11696 if (f->async_visible)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11697 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11698 BLOCK_INPUT;
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
11699 #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
11700 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
11701 #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
11702 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
11703 #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
11704 XFlush (FRAME_X_DISPLAY (f));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11705 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11706 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11707 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11708
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11709 /* Lower frame F. */
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11710
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
11711 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11712 x_lower_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11713 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11714 {
1658
452ba03935d7 * xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents: 1530
diff changeset
11715 if (f->async_visible)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11716 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11717 BLOCK_INPUT;
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
11718 #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
11719 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
11720 #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
11721 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
11722 #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
11723 XFlush (FRAME_X_DISPLAY (f));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11724 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11725 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11726 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11727
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
11728 static void
14411
bac274f178b0 (XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents: 14305
diff changeset
11729 XTframe_raise_lower (f, raise_flag)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
11730 FRAME_PTR f;
14411
bac274f178b0 (XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents: 14305
diff changeset
11731 int raise_flag;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
11732 {
14411
bac274f178b0 (XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents: 14305
diff changeset
11733 if (raise_flag)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
11734 x_raise_frame (f);
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
11735 else
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
11736 x_lower_frame (f);
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
11737 }
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
11738
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
11739 /* Change of visibility. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11740
12192
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
11741 /* 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
11742 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
11743 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
11744 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
11745 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
11746 finishes with it. */
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
11747
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
11748 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11749 x_make_frame_visible (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11750 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11751 {
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11752 Lisp_Object type;
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
11753 int original_top, original_left;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11754
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
11755 BLOCK_INPUT;
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
11756
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11757 type = x_icon_type (f);
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11758 if (!NILP (type))
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11759 x_bitmap_icon (f, type);
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
11760
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11761 if (! FRAME_VISIBLE_P (f))
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11762 {
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
11763 /* 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
11764 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
11765 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
11766 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
11767 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
11768 && ! 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
11769 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
11770
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
11771 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
11772
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
11773 if (! EQ (Vx_no_window_manager, Qt))
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11774 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
11775 #ifdef USE_X_TOOLKIT
7167
2fa74c48e4e5 (x_make_frame_visible): Use XtMapWidget, not XtPopup.
Richard M. Stallman <rms@gnu.org>
parents: 7128
diff changeset
11776 /* 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
11777 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
11778 #else /* not USE_X_TOOLKIT */
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
11779 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
11780 #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
11781 #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
11782 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
11783 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
11784 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
11785 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
11786 #endif
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
11787 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11788
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
11789 XFlush (FRAME_X_DISPLAY (f));
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
11790
7959
224440646fa7 (make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents: 7935
diff changeset
11791 /* 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
11792 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
11793 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
11794 {
224440646fa7 (make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents: 7935
diff changeset
11795 Lisp_Object frame;
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
11796 int count;
18528
73f4d9258f04 (x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents: 18347
diff changeset
11797 /* 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
11798 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
11799 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
11800 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
11801
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
11802 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
11803 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
11804
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
11805 /* This must come after we set COUNT. */
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
11806 UNBLOCK_INPUT;
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
11807
22907
43e290c6fb19 (x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents: 22773
diff changeset
11808 /* 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
11809
18008
d25d2472df51 (XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents: 17963
diff changeset
11810 /* 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
11811 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
11812 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
11813 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
11814
73f4d9258f04 (x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents: 18347
diff changeset
11815 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
11816 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
11817 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
11818
18630
3e414b9da546 (x_make_frame_visible): Don't move the frame
Richard M. Stallman <rms@gnu.org>
parents: 18528
diff changeset
11819 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
11820 && 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
11821 && previously_visible)
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
11822 {
22907
43e290c6fb19 (x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents: 22773
diff changeset
11823 Drawable rootw;
43e290c6fb19 (x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents: 22773
diff changeset
11824 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
11825 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
11826
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
11827 BLOCK_INPUT;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
11828
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11829 /* 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
11830 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
11831 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
11832 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
11833 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
11834 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
11835 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
11836 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
11837 &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
11838
43e290c6fb19 (x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents: 22773
diff changeset
11839 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
11840 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
11841 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
11842
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
11843 UNBLOCK_INPUT;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
11844 }
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11845
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
11846 XSETFRAME (frame, f);
9337
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
11847
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
11848 /* 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
11849 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
11850 MapNotify at all.. */
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
11851 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
11852 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
11853 {
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
11854 /* 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
11855 x_sync (f);
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
11856
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
11857 /* 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
11858 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
11859 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
11860 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
11861 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
11862 probably a bug. */
8682
42f95b1368ea (x_make_frame_visible): Call input_polling_used.
Richard M. Stallman <rms@gnu.org>
parents: 8652
diff changeset
11863 if (input_polling_used ())
8652
c2c1a477ddd5 Include keyboard.h.
Richard M. Stallman <rms@gnu.org>
parents: 8634
diff changeset
11864 {
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
11865 /* 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
11866 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
11867 handler reset it. */
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
11868 extern void poll_for_input_1 P_ ((void));
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
11869 int old_poll_suppress_count = poll_suppress_count;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
11870 poll_suppress_count = 1;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
11871 poll_for_input_1 ();
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
11872 poll_suppress_count = old_poll_suppress_count;
8652
c2c1a477ddd5 Include keyboard.h.
Richard M. Stallman <rms@gnu.org>
parents: 8634
diff changeset
11873 }
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
11874
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
11875 /* 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
11876 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
11877 }
7959
224440646fa7 (make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents: 7935
diff changeset
11878 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11879 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11880
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11881 /* Change from mapped state to withdrawn state. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11882
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
11883 /* Make the frame visible (mapped and not iconified). */
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
11884
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
11885 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11886 x_make_frame_invisible (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11887 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11888 {
7602
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
11889 Window window;
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
11890
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
11891 #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
11892 /* 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
11893 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
11894 #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
11895 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
11896 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11897
3284
a47979ffad1e (XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents: 3282
diff changeset
11898 /* 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
11899 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
11900 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
11901
6983
b18e5c09d7c3 (XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents: 6941
diff changeset
11902 #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
11903 if (! f->async_visible && ! f->async_iconified)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11904 return;
6983
b18e5c09d7c3 (XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents: 6941
diff changeset
11905 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11906
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11907 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
11908
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
11909 /* 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
11910 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
11911 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
11912 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
11913 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
11914 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
11915
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
11916 #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
11917
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
11918 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
11919 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
11920 {
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
11921 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
11922 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
11923 }
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
11924 #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
11925
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
11926 /* Tell the window manager what we're going to do. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11927 if (! EQ (Vx_no_window_manager, Qt))
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11928 {
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
11929 XEvent unmap;
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
11930
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
11931 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
11932 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
11933 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
11934 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
11935 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
11936 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
11937 False,
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11938 SubstructureRedirectMaskSubstructureNotifyMask,
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
11939 &unmap))
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
11940 {
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
11941 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
11942 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
11943 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11944 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11945
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
11946 /* 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
11947 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
11948 #endif /* ! defined (HAVE_X11R4) */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11949
6983
b18e5c09d7c3 (XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents: 6941
diff changeset
11950 /* 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
11951 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
11952 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
11953 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
11954 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
11955 f->visible = 0;
b18e5c09d7c3 (XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents: 6941
diff changeset
11956 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
11957 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
11958 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
11959
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
11960 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
11961
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11962 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11963 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11964
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11965 /* Change window state from mapped to iconified. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11966
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
11967 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11968 x_iconify_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11969 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11970 {
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
11971 int result;
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11972 Lisp_Object type;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11973
3284
a47979ffad1e (XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents: 3282
diff changeset
11974 /* 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
11975 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
11976 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
11977
1658
452ba03935d7 * xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents: 1530
diff changeset
11978 if (f->async_iconified)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11979 return;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11980
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
11981 BLOCK_INPUT;
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
11982
13627
8873aa3451dd (XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents: 13598
diff changeset
11983 FRAME_SAMPLE_VISIBILITY (f);
8873aa3451dd (XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents: 13598
diff changeset
11984
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11985 type = x_icon_type (f);
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11986 if (!NILP (type))
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11987 x_bitmap_icon (f, type);
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
11988
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
11989 #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
11990
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
11991 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
11992 {
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
11993 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
11994 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
11995 /* 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
11996 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
11997 /* 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
11998 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
11999 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
12000 f->iconified = 1;
16753
ab63a77c3a23 (x_iconify_frame): Clear visible when we set iconified.
Richard M. Stallman <rms@gnu.org>
parents: 16491
diff changeset
12001 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
12002 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
12003 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
12004 UNBLOCK_INPUT;
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
12005 return;
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
12006 }
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
12007
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12008 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
12009 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
12010 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
12011 UNBLOCK_INPUT;
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12012
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12013 if (!result)
7602
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
12014 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
12015
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12016 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
12017 f->async_visible = 0;
ab63a77c3a23 (x_iconify_frame): Clear visible when we set iconified.
Richard M. Stallman <rms@gnu.org>
parents: 16491
diff changeset
12018
5740
48da4ed089e9 (x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents: 5737
diff changeset
12019
48da4ed089e9 (x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents: 5737
diff changeset
12020 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
12021 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
12022 UNBLOCK_INPUT;
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12023 #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
12024
7738
a810335742bb (x_iconify_frame): Call x_set_offset,
Richard M. Stallman <rms@gnu.org>
parents: 7706
diff changeset
12025 /* 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
12026 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
12027 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
12028 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
12029
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12030 /* 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
12031 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
12032
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12033 /* 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
12034 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
12035 {
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12036 XEvent message;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
12037
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
12038 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
12039 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
12040 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
12041 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
12042 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
12043
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12044 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
12045 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
12046 False,
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12047 SubstructureRedirectMask | SubstructureNotifyMask,
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12048 &message))
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12049 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12050 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
12051 error ("Can't notify window manager of iconification");
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12052 }
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12053 }
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12054
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
12055 /* 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
12056 IconicState. */
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
12057 x_wm_set_window_state (f, IconicState);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12058
4304
b5014da888a8 (x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents: 4277
diff changeset
12059 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
12060 {
b5014da888a8 (x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents: 4277
diff changeset
12061 /* 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
12062 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
12063 }
b5014da888a8 (x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents: 4277
diff changeset
12064
1658
452ba03935d7 * xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents: 1530
diff changeset
12065 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
12066 f->async_visible = 0;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12067
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12068 XFlush (FRAME_X_DISPLAY (f));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12069 UNBLOCK_INPUT;
5740
48da4ed089e9 (x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents: 5737
diff changeset
12070 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12071 }
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
12072
1810
bf618128d973 * xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents: 1803
diff changeset
12073 /* Destroy the X window of frame F. */
bf618128d973 * xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents: 1803
diff changeset
12074
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12075 void
1810
bf618128d973 * xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents: 1803
diff changeset
12076 x_destroy_window (f)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12077 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12078 {
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12079 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
12080
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12081 BLOCK_INPUT;
1810
bf618128d973 * xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents: 1803
diff changeset
12082
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
12083 /* 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
12084 commands to the X server. */
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
12085 if (dpyinfo->display != 0)
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
12086 {
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
12087 if (f->output_data.x->icon_desc != 0)
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
12088 XDestroyWindow (FRAME_X_DISPLAY (f), f->output_data.x->icon_desc);
14830
34db919835d3 (x_destroy_window) [HAVE_X_I18N]: Free xic and xim of frame.
Richard M. Stallman <rms@gnu.org>
parents: 14826
diff changeset
12089 #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
12090 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
12091 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
12092 #endif
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
12093 XDestroyWindow (FRAME_X_DISPLAY (f), f->output_data.x->window_desc);
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12094 #ifdef USE_X_TOOLKIT
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12095 if (f->output_data.x->widget)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12096 XtDestroyWidget (f->output_data.x->widget);
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
12097 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
12098 #endif /* USE_X_TOOLKIT */
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12099
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
12100 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
12101 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
12102 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
12103 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
12104 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
12105 unload_color (f, f->output_data.x->mouse_pixel);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
12106 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
12107 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
12108 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
12109 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
12110 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
12111 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
12112 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
12113 unload_color (f, f->output_data.x->black_relief.pixel);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
12114
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
12115 free_frame_faces (f);
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
12116 XFlush (FRAME_X_DISPLAY (f));
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
12117 }
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12118
17575
3f073536c09a Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17574
diff changeset
12119 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
12120 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
12121
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
12122 xfree (f->output_data.x);
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
12123 f->output_data.x = 0;
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
12124 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
12125 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
12126 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
12127 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
12128 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
12129 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
12130
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12131 dpyinfo->reference_count--;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12132
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12133 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
12134 {
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12135 dpyinfo->mouse_face_beg_row
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12136 = dpyinfo->mouse_face_beg_col = -1;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12137 dpyinfo->mouse_face_end_row
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12138 = dpyinfo->mouse_face_end_col = -1;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12139 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
12140 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
12141 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
12142 }
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
12143
1810
bf618128d973 * xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents: 1803
diff changeset
12144 UNBLOCK_INPUT;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12145 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12146
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
12147 /* Setting window manager hints. */
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
12148
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12149 /* 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
12150 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
12151 that the window now has.
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12152 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
12153 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
12154
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12155 void
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12156 x_wm_set_size_hint (f, flags, user_position)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12157 struct frame *f;
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12158 long flags;
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12159 int user_position;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12160 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12161 XSizeHints size_hints;
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12162
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12163 #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
12164 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
12165 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
12166 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
12167 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
12168 #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
12169 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
12170 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12171
7187
ca0102511d80 (x_wm_set_size_hint): Don't set PMaxSize.
Richard M. Stallman <rms@gnu.org>
parents: 7169
diff changeset
12172 /* 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
12173 size_hints.flags = PResizeInc | PMinSize /* | PMaxSize */;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12174
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
12175 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
12176 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
12177
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
12178 #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
12179 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
12180 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
12181 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
12182 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
12183 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
12184 #else /* not USE_X_TOOLKIT */
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12185 size_hints.height = PIXEL_HEIGHT (f);
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12186 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
12187 #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
12188
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
12189 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
12190 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
12191 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
12192 = 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
12193 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
12194 = 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
12195
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12196 /* Calculate the base and minimum sizes.
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12197
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12198 (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
12199 Instead we copy the values that the widgets are using, below.) */
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12200 #ifndef USE_X_TOOLKIT
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
12201 {
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
12202 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
12203 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
12204
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
12205 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
12206 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
12207
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
12208 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
12209
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
12210 /* 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
12211 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
12212 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
12213 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
12214 zero-row, zero-column frame.
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
12215
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
12216 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
12217 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
12218 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
12219
cd3d59155bf7 * xterm.c (x_wm_set_size_hint): Set the base_width and base_height
Jim Blandy <jimb@redhat.com>
parents: 1077
diff changeset
12220 #ifdef HAVE_X11R4
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
12221 size_hints.flags |= PBaseSize;
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
12222 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
12223 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
12224 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
12225 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
12226 #else
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
12227 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
12228 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
12229 #endif
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
12230 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12231
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12232 /* 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
12233 if (flags)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12234 {
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12235 size_hints.flags |= flags;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12236 goto no_read;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12237 }
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12238 #endif /* not USE_X_TOOLKIT */
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12239
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12240 {
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12241 XSizeHints hints; /* Sometimes I hate X Windows... */
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12242 long supplied_return;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12243 int value;
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12244
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12245 #ifdef HAVE_X11R4
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12246 value = XGetWMNormalHints (FRAME_X_DISPLAY (f), window, &hints,
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12247 &supplied_return);
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12248 #else
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12249 value = XGetNormalHints (FRAME_X_DISPLAY (f), window, &hints);
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12250 #endif
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12251
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12252 #ifdef USE_X_TOOLKIT
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12253 size_hints.base_height = hints.base_height;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12254 size_hints.base_width = hints.base_width;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12255 size_hints.min_height = hints.min_height;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12256 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
12257 #endif
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
12258
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12259 if (flags)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12260 size_hints.flags |= flags;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12261 else
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12262 {
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12263 if (value == 0)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12264 hints.flags = 0;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12265 if (hints.flags & PSize)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12266 size_hints.flags |= PSize;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12267 if (hints.flags & PPosition)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12268 size_hints.flags |= PPosition;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12269 if (hints.flags & USPosition)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12270 size_hints.flags |= USPosition;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12271 if (hints.flags & USSize)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12272 size_hints.flags |= USSize;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12273 }
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12274 }
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12275
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12276 #ifndef USE_X_TOOLKIT
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
12277 no_read:
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12278 #endif
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
12279
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12280 #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
12281 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
12282 size_hints.flags |= PWinGravity;
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12283
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12284 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
12285 {
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12286 size_hints.flags &= ~ PPosition;
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
12287 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
12288 }
4777
21ed9c9bb210 (w_wn_set_size_hint): Make recent window gravity addition
Brian Fox <bfox@gnu.org>
parents: 4696
diff changeset
12289 #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
12290
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
12291 #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
12292 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
12293 #else
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12294 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
12295 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12296 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12297
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12298 /* Used for IconicState or NormalState */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12299
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12300 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12301 x_wm_set_window_state (f, state)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12302 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12303 int state;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12304 {
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12305 #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
12306 Arg al[1];
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
12307
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
12308 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
12309 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
12310 #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
12311 Window window = FRAME_X_WINDOW (f);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12312
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
12313 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
12314 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
12315
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
12316 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
12317 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12318 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12319
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12320 void
9542
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
12321 x_wm_set_icon_pixmap (f, pixmap_id)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12322 struct frame *f;
9542
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
12323 int pixmap_id;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12324 {
15117
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
12325 Pixmap icon_pixmap;
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
12326
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12327 #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
12328 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
12329 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12330
9542
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
12331 if (pixmap_id > 0)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
12332 {
15117
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
12333 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
12334 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
12335 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
12336 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
12337 {
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
12338 /* 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
12339 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
12340 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
12341 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
12342 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
12343 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
12344 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
12345 #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
12346 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
12347 #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
12348 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
12349 #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
12350 }
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
12351
15117
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
12352 #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
12353
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
12354 {
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
12355 Arg al[1];
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
12356 XtSetArg (al[0], XtNiconPixmap, icon_pixmap);
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
12357 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
12358 }
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
12359
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
12360 #else /* not USE_X_TOOLKIT */
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
12361
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
12362 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
12363 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
12364
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
12365 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12366 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12367
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12368 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12369 x_wm_set_icon_position (f, icon_x, icon_y)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12370 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12371 int icon_x, icon_y;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12372 {
7806
ef7a60d59543 (x_wm_set_icon_position, x_wm_set_icon_pixmap):
Richard M. Stallman <rms@gnu.org>
parents: 7801
diff changeset
12373 #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
12374 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
12375 #else
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
12376 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
12377 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12378
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
12379 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
12380 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
12381 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
12382
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
12383 XSetWMHints (FRAME_X_DISPLAY (f), window, &f->output_data.x->wm_hints);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12384 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12385
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12386
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12387 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12388 Fonts
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12389 ***********************************************************************/
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12390
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12391 /* 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
12392
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12393 struct font_info *
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12394 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
12395 FRAME_PTR f;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12396 int font_idx;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12397 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12398 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
12399 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12400
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12401
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12402 /* Return a list of names of available fonts matching PATTERN on frame
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12403 F. If SIZE is not 0, it is the size (maximum bound width) of fonts
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12404 to be listed. Frame F NULL means we have not yet created any
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12405 frame on X, and consult the first display in x_display_list.
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12406 MAXNAMES sets a limit on how many fonts to match. */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12407
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12408 Lisp_Object
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12409 x_list_fonts (f, pattern, size, maxnames)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12410 FRAME_PTR f;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12411 Lisp_Object pattern;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12412 int size;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12413 int maxnames;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12414 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12415 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
12416 Lisp_Object tem, second_best;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12417 Display *dpy = f != NULL ? FRAME_X_DISPLAY (f) : x_display_list->display;
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12418 int try_XLoadQueryFont = 0;
24633
c7d905dca6ba (x_list_fonts): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 24618
diff changeset
12419 int count;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12420
19447
34099ec680df (x_list_fonts): Adjusted for the name change of
Kenichi Handa <handa@m17n.org>
parents: 19276
diff changeset
12421 patterns = Fassoc (pattern, Valternate_fontname_alist);
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12422 if (NILP (patterns))
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12423 patterns = Fcons (pattern, Qnil);
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12424
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12425 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
12426 /* 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
12427 try_XLoadQueryFont = 1;
19062
9cc02044117d (x_list_fonts): Request at least 10 fonts by XListFonts.
Kenichi Handa <handa@m17n.org>
parents: 19060
diff changeset
12428
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
12429 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
12430 {
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12431 int num_fonts;
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
12432 char **names = NULL;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12433
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
12434 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
12435 /* 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
12436 The cache is an alist of the form:
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
12437 (((PATTERN . MAXNAMES) (FONTNAME . WIDTH) ...) ...)
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
12438 */
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
12439 if (f && (tem = XCDR (FRAME_X_DISPLAY_INFO (f)->name_list_element),
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12440 key = Fcons (pattern, make_number (maxnames)),
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12441 !NILP (list = Fassoc (key, tem))))
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12442 {
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12443 list = Fcdr_safe (list);
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12444 /* 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
12445 goto label_cached;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12446 }
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12447
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12448 /* 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
12449
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12450 BLOCK_INPUT;
24618
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12451 count = x_catch_errors (dpy);
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12452
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12453 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
12454 {
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12455 XFontStruct *font;
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12456 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
12457
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12458 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
12459 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
12460 {
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12461 /* 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
12462 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
12463 font = NULL;
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12464 x_clear_errors (dpy);
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12465 }
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12466
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12467 if (font
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12468 && 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
12469 {
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12470 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
12471 int len = strlen (name);
22530
6d2e22a16952 (x_list_fonts): Keep alloca usage simple.
Karl Heuer <kwzh@gnu.org>
parents: 22522
diff changeset
12472 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
12473
23095
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
12474 /* 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
12475 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
12476 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
12477 if (len == 0)
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
12478 try_XLoadQueryFont = 0;
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
12479 else
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
12480 {
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
12481 num_fonts = 1;
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
12482 names = (char **) alloca (sizeof (char *));
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
12483 /* 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
12484 simple var. */
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
12485 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
12486 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
12487 XFree (name);
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
12488 }
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12489 }
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12490 else
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12491 try_XLoadQueryFont = 0;
22943
5493321d4526 (x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 22907
diff changeset
12492
5493321d4526 (x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 22907
diff changeset
12493 if (font)
5493321d4526 (x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 22907
diff changeset
12494 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
12495 }
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12496
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12497 if (!try_XLoadQueryFont)
24618
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12498 {
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12499 /* 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
12500 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
12501 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
12502 &num_fonts);
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12503 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
12504 {
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12505 /* 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
12506 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
12507 names = NULL;
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12508 x_clear_errors (dpy);
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12509 }
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12510 }
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12511
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12512 x_uncatch_errors (dpy, count);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12513 UNBLOCK_INPUT;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12514
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12515 if (names)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12516 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12517 int i;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12518
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12519 /* 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
12520 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
12521 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
12522 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12523 int width = 0;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12524 char *p = names[i];
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12525 int average_width = -1, dashes = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12526
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12527 /* Count the number of dashes in NAMES[I]. If there are
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12528 14 dashes, and the field value following 12th dash
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12529 (AVERAGE_WIDTH) is 0, this is a auto-scaled font which
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12530 is usually too ugly to be used for editing. Let's
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12531 ignore it. */
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12532 while (*p)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12533 if (*p++ == '-')
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12534 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12535 dashes++;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12536 if (dashes == 7) /* PIXEL_SIZE field */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12537 width = atoi (p);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12538 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
12539 average_width = atoi (p);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12540 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12541 if (dashes < 14 || average_width != 0)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12542 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12543 tem = build_string (names[i]);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12544 if (NILP (Fassoc (tem, list)))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12545 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12546 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
12547 && ((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
12548 (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
12549 >= 0))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12550 /* 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
12551 width of this font. */
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12552 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
12553 else
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12554 /* 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
12555 list = Fcons (Fcons (tem, Qnil), list);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12556 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12557 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12558 }
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
12559 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
12560 XFreeFontNames (names);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12561 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12562
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12563 /* Now store the result in the cache. */
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12564 if (f != NULL)
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
12565 XCDR (FRAME_X_DISPLAY_INFO (f)->name_list_element)
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12566 = Fcons (Fcons (key, list),
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
12567 XCDR (FRAME_X_DISPLAY_INFO (f)->name_list_element));
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12568
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12569 label_cached:
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12570 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
12571
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12572 newlist = second_best = Qnil;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12573 /* 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
12574 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
12575 {
19060
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
12576 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
12577
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
12578 tem = XCAR (list);
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
12579
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
12580 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
12581 continue;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12582 if (!size)
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12583 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
12584 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
12585 continue;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12586 }
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12587
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
12588 if (!INTEGERP (XCDR (tem)))
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12589 {
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12590 /* Since we have not yet known the size of this font, we
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12591 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
12592 XFontStruct *thisinfo;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12593
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12594 BLOCK_INPUT;
24618
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12595 count = x_catch_errors (dpy);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12596 thisinfo = XLoadQueryFont (dpy,
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
12597 XSTRING (XCAR (tem))->data);
24618
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12598 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
12599 {
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12600 /* 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
12601 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
12602 thisinfo = NULL;
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12603 x_clear_errors (dpy);
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12604 }
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
12605 x_uncatch_errors (dpy, count);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12606 UNBLOCK_INPUT;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12607
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12608 if (thisinfo)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12609 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
12610 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
12611 = (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
12612 ? 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
12613 : 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
12614 XFreeFont (dpy, thisinfo);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12615 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12616 else
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12617 /* 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
12618 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
12619 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
12620 XCDR (tem) = make_number (0);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12621 }
19060
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
12622
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
12623 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
12624 if (found_size == size)
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
12625 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
12626 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
12627 {
19060
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
12628 if (NILP (second_best))
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12629 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
12630 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
12631 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
12632 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
12633 || 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
12634 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
12635 }
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
12636 else
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
12637 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
12638 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
12639 && 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
12640 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
12641 }
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12642 }
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12643 }
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12644 if (!NILP (newlist))
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12645 break;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12646 else if (!NILP (second_best))
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12647 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
12648 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
12649 break;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12650 }
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12651 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12652
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12653 return newlist;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12654 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12655
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12656
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12657 #if GLYPH_DEBUG
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12658
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12659 /* 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
12660 font table. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12661
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12662 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12663 x_check_font (f, font)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12664 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12665 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12666 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12667 int i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12668 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
12669
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12670 xassert (font != NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12671
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12672 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
12673 if (dpyinfo->font_table[i].name
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12674 && font == dpyinfo->font_table[i].font)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12675 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12676
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12677 xassert (i < dpyinfo->n_fonts);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12678 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12679
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12680 #endif /* GLYPH_DEBUG != 0 */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12681
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12682 /* 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
12683 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
12684 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
12685 "-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
12686 have font->min_bounds.width == 0. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12687
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12688 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12689 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
12690 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12691 int *w, *h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12692 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12693 *h = FONT_HEIGHT (font);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12694 *w = font->min_bounds.width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12695
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12696 /* 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
12697 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
12698 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
12699 if (*w <= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12700 *w = font->max_bounds.width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12701 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12702
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12703
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12704 /* 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
12705 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
12706 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
12707 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
12708 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
12709
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12710 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12711 x_compute_min_glyph_bounds (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12712 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12713 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12714 int i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12715 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
12716 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12717 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
12718 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
12719
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12720 dpyinfo->smallest_font_height = 100000;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12721 dpyinfo->smallest_char_width = 100000;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12722
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12723 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
12724 if (dpyinfo->font_table[i].name)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12725 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12726 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
12727 int w, h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12728
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12729 font = (XFontStruct *) fontp->font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12730 xassert (font != (XFontStruct *) ~0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12731 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
12732
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12733 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
12734 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
12735 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12736
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12737 xassert (dpyinfo->smallest_char_width > 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12738 && dpyinfo->smallest_font_height > 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12739
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12740 return (dpyinfo->n_fonts == 1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12741 || dpyinfo->smallest_char_width < old_width
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12742 || dpyinfo->smallest_font_height < old_height);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12743 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12744
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12745
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12746 /* 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
12747 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
12748 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
12749 If loading is failed, return NULL. */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12750
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12751 struct font_info *
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12752 x_load_font (f, fontname, size)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12753 struct frame *f;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12754 register char *fontname;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12755 int size;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12756 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12757 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
12758 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
12759 int count;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12760
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12761 /* 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
12762 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
12763 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
12764 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
12765
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12766 if (!NILP (font_names))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12767 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12768 Lisp_Object tail;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12769 int i;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12770
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12771 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
12772 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
12773 if (dpyinfo->font_table[i].name
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12774 && (!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
12775 XSTRING (XCAR (tail))->data)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12776 || !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
12777 XSTRING (XCAR (tail))->data)))
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12778 return (dpyinfo->font_table + i);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12779 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12780
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12781 /* 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
12782 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12783 char *full_name;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12784 XFontStruct *font;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12785 struct font_info *fontp;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12786 unsigned long value;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12787 int i;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12788
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12789 /* 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
12790 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
12791 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
12792 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
12793 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
12794 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
12795 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
12796
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12797 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
12798 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
12799 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
12800 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
12801 {
d4ee4399e999 (x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24224
diff changeset
12802 /* 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
12803 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
12804 font = NULL;
d4ee4399e999 (x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24224
diff changeset
12805 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
12806 }
d4ee4399e999 (x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24224
diff changeset
12807 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
12808 UNBLOCK_INPUT;
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12809 if (!font)
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12810 return NULL;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12811
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12812 /* 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
12813 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
12814 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
12815 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12816
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12817 /* 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
12818 if (i == dpyinfo->n_fonts
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12819 && 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
12820 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12821 int sz;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12822 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
12823 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
12824 dpyinfo->font_table
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12825 = (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
12826 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12827
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12828 fontp = dpyinfo->font_table + i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12829 if (i == dpyinfo->n_fonts)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12830 ++dpyinfo->n_fonts;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12831
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12832 /* 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
12833 BLOCK_INPUT;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12834 fontp->font = font;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12835 fontp->font_idx = i;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12836 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
12837 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
12838
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12839 /* 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
12840 full_name = 0;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12841 if (XGetFontProperty (font, XA_FONT, &value))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12842 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12843 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
12844 char *p = name;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12845 int dashes = 0;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12846
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12847 /* 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
12848 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
12849 so don't use it.
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12850 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
12851 stored in them. */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12852 while (*p)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12853 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12854 if (*p == '-')
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12855 dashes++;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12856 p++;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12857 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12858
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12859 if (dashes >= 13)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12860 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12861 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
12862 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
12863 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12864
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12865 XFree (name);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12866 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12867
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12868 if (full_name != 0)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12869 fontp->full_name = full_name;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12870 else
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12871 fontp->full_name = fontp->name;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12872
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12873 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
12874 fontp->height = FONT_HEIGHT (font);
4001ff593a99 (x_load_font): For the height of font, if normarl ascent and
Kenichi Handa <handa@m17n.org>
parents: 24223
diff changeset
12875 {
4001ff593a99 (x_load_font): For the height of font, if normarl ascent and
Kenichi Handa <handa@m17n.org>
parents: 24223
diff changeset
12876 /* For some font, ascent and descent in max_bounds field is
4001ff593a99 (x_load_font): For the height of font, if normarl ascent and
Kenichi Handa <handa@m17n.org>
parents: 24223
diff changeset
12877 larger than the above value. */
4001ff593a99 (x_load_font): For the height of font, if normarl ascent and
Kenichi Handa <handa@m17n.org>
parents: 24223
diff changeset
12878 int max_height = font->max_bounds.ascent + font->max_bounds.descent;
4001ff593a99 (x_load_font): For the height of font, if normarl ascent and
Kenichi Handa <handa@m17n.org>
parents: 24223
diff changeset
12879 if (max_height > fontp->height)
24690
585a5e69e371 (x_load_font): Fix typo (`>' -> `=').
Kenichi Handa <handa@m17n.org>
parents: 24633
diff changeset
12880 fontp->height = max_height;
24224
4001ff593a99 (x_load_font): For the height of font, if normarl ascent and
Kenichi Handa <handa@m17n.org>
parents: 24223
diff changeset
12881 }
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12882
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12883 if (NILP (font_names))
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12884 {
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12885 /* 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
12886 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
12887 the cache for x_list_fonts. */
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12888 Lisp_Object lispy_name = build_string (fontname);
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12889 Lisp_Object lispy_full_name = build_string (fontp->full_name);
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12890
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
12891 XCDR (dpyinfo->name_list_element)
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12892 = Fcons (Fcons (Fcons (lispy_name, make_number (256)),
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12893 Fcons (Fcons (lispy_full_name,
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12894 make_number (fontp->size)),
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12895 Qnil)),
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
12896 XCDR (dpyinfo->name_list_element));
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12897 if (full_name)
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
12898 XCDR (dpyinfo->name_list_element)
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12899 = Fcons (Fcons (Fcons (lispy_full_name, make_number (256)),
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12900 Fcons (Fcons (lispy_full_name,
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12901 make_number (fontp->size)),
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12902 Qnil)),
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
12903 XCDR (dpyinfo->name_list_element));
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12904 }
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12905
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12906 /* 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
12907 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
12908 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
12909 (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
12910 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
12911 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
12912 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
12913 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
12914 fontp->encoding[1]
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12915 = (font->max_byte1 == 0
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12916 /* 1-byte font */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12917 ? (font->min_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12918 ? (font->max_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12919 ? 0 /* 0x20..0x7F */
18057
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
12920 : 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
12921 : 1) /* 0xA0..0xFF */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12922 /* 2-byte font */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12923 : (font->min_byte1 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12924 ? (font->max_byte1 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12925 ? (font->min_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12926 ? (font->max_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12927 ? 0 /* 0x2020..0x7F7F */
18057
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
12928 : 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
12929 : 3) /* 0x20A0..0x7FFF */
18057
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
12930 : 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
12931 : (font->min_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12932 ? (font->max_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12933 ? 2 /* 0xA020..0xFF7F */
18057
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
12934 : 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
12935 : 1))); /* 0xA0A0..0xFFFF */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12936
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12937 fontp->baseline_offset
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12938 = (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
12939 ? (long) value : 0);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12940 fontp->relative_compose
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12941 = (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
12942 ? (long) value : 0);
17103
7cde34a6424e (dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents: 17050
diff changeset
12943 fontp->default_ascent
7cde34a6424e (dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents: 17050
diff changeset
12944 = (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
12945 ? (long) value : 0);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12946
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12947 /* 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
12948 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
12949 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
12950 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
12951 glyph matrix reallocation necessary. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12952 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
12953 UNBLOCK_INPUT;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12954 return fontp;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12955 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12956 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12957
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12958
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12959 /* 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
12960 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
12961
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12962 struct font_info *
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12963 x_query_font (f, fontname)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12964 struct frame *f;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12965 register char *fontname;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12966 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12967 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
12968 int i;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12969
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12970 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
12971 if (dpyinfo->font_table[i].name
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12972 && (!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
12973 || !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
12974 return (dpyinfo->font_table + i);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12975 return NULL;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12976 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12977
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12978
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12979 /* 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
12980 `encoder' of the structure. */
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
12981
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
12982 void
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
12983 x_find_ccl_program (fontp)
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
12984 struct font_info *fontp;
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
12985 {
25068
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
12986 Lisp_Object list, elt;
21548
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
12987
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
12988 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
12989 {
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
12990 elt = XCAR (list);
21548
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
12991 if (CONSP (elt)
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
12992 && STRINGP (XCAR (elt))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
12993 && (fast_c_string_match_ignore_case (XCAR (elt), fontp->name)
21548
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
12994 >= 0))
25068
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
12995 break;
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
12996 }
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
12997 if (! NILP (list))
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
12998 {
25085
23813e3a69b8 (x_find_ccl_program): Add casting.
Kenichi Handa <handa@m17n.org>
parents: 25083
diff changeset
12999 struct ccl_program *ccl
23813e3a69b8 (x_find_ccl_program): Add casting.
Kenichi Handa <handa@m17n.org>
parents: 25083
diff changeset
13000 = (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
13001
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13002 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
13003 xfree (ccl);
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
13004 else
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
13005 fontp->font_encoder = ccl;
21548
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
13006 }
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
13007 }
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
13008
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13009
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13010
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13011 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13012 Initialization
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13013 ***********************************************************************/
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
13014
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13015 #ifdef USE_X_TOOLKIT
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13016 static XrmOptionDescRec emacs_options[] = {
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13017 {"-geometry", ".geometry", XrmoptionSepArg, NULL},
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13018 {"-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
13019
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13020 {"-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
13021 XrmoptionSepArg, NULL},
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13022 {"-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
13023
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13024 {"-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
13025 {"-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
13026 {"-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
13027 {"-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
13028 {"-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
13029 {"-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
13030 {"-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
13031 };
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13032 #endif /* USE_X_TOOLKIT */
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13033
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13034 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
13035
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13036 #ifdef MULTI_KBOARD
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13037 /* 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
13038 the screen number from the server number. */
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13039 static int
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13040 same_x_server (name1, name2)
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13041 char *name1, *name2;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13042 {
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13043 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
13044 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
13045 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
13046 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
13047
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13048 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
13049 && 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
13050 length_until_period++;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13051
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13052 /* 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
13053 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
13054 name1 += 4;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13055 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
13056 name2 += 4;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13057 /* 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
13058 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
13059 && name1[system_name_length] == ':')
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13060 name1 += system_name_length;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13061 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
13062 && name2[system_name_length] == ':')
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13063 name2 += system_name_length;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13064 /* 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
13065 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
13066 && name1[length_until_period] == ':')
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13067 name1 += length_until_period;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13068 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
13069 && name2[length_until_period] == ':')
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13070 name2 += length_until_period;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
13071
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13072 for (; *name1 != '\0' && *name1 == *name2; name1++, name2++)
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13073 {
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13074 if (*name1 == ':')
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13075 seen_colon++;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13076 if (seen_colon && *name1 == '.')
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13077 return 1;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13078 }
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13079 return (seen_colon
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13080 && (*name1 == '.' || *name1 == '\0')
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13081 && (*name2 == '.' || *name2 == '\0'));
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13082 }
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13083 #endif
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13084
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
13085 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
13086 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
13087 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
13088 char *xrm_option;
10e818a0248a (x_term_init): New args xrm_option and resource_string.
Richard M. Stallman <rms@gnu.org>
parents: 7738
diff changeset
13089 char *resource_name;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13090 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
13091 int connection;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13092 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
13093 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
13094 XrmDatabase xrdb;
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
13095
11997
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
13096 BLOCK_INPUT;
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
13097
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13098 if (!x_initialized)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13099 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13100 x_initialize ();
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13101 x_initialized = 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13102 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13103
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13104 #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
13105 /* 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
13106 errors with X11R5:
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
13107 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
13108 on protocol request 18skiloaf.
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
13109 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
13110 #ifdef HAVE_X11XTR6
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
13111 XtSetLanguageProc (NULL, NULL, NULL);
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
13112 #endif
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
13113
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13114 {
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13115 int argc = 0;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13116 char *argv[3];
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13117
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13118 argv[0] = "";
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13119 argc = 1;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13120 if (xrm_option)
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13121 {
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13122 argv[argc++] = "-xrm";
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13123 argv[argc++] = xrm_option;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13124 }
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13125 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
13126 resource_name, EMACS_CLASS,
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13127 emacs_options, XtNumber (emacs_options),
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13128 &argc, argv);
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
13129
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
13130 #ifdef HAVE_X11XTR6
14963
6ac4f300f9b4 Include locale.h if HAVE_SETLOCALE.
Richard M. Stallman <rms@gnu.org>
parents: 14946
diff changeset
13131 /* 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
13132 fixup_locale ();
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
13133 #endif
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13134 }
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13135
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
13136 #else /* not USE_X_TOOLKIT */
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
13137 #ifdef HAVE_X11R5
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
13138 XSetLocaleModifiers ("");
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
13139 #endif
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13140 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
13141 #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
13142
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13143 /* Detect failure. */
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13144 if (dpy == 0)
11997
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
13145 {
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
13146 UNBLOCK_INPUT;
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
13147 return 0;
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
13148 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13149
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13150 /* 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
13151
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13152 dpyinfo = (struct x_display_info *) xmalloc (sizeof (struct x_display_info));
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13153
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13154 #ifdef MULTI_KBOARD
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13155 {
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13156 struct x_display_info *share;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13157 Lisp_Object tail;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13158
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13159 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
13160 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
13161 if (same_x_server (XSTRING (XCAR (XCAR (tail)))->data,
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13162 XSTRING (display_name)->data))
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13163 break;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13164 if (share)
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13165 dpyinfo->kboard = share->kboard;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13166 else
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13167 {
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13168 dpyinfo->kboard = (KBOARD *) xmalloc (sizeof (KBOARD));
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13169 init_kboard (dpyinfo->kboard);
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
13170 if (!EQ (XSYMBOL (Qvendor_specific_keysyms)->function, Qunbound))
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
13171 {
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
13172 char *vendor = ServerVendor (dpy);
28307
1d4a11a5f39d (x_term_init): Unblock input around call1.
Gerd Moellmann <gerd@gnu.org>
parents: 28281
diff changeset
13173 UNBLOCK_INPUT;
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
13174 dpyinfo->kboard->Vsystem_key_alist
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
13175 = call1 (Qvendor_specific_keysyms,
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
13176 build_string (vendor ? vendor : ""));
28307
1d4a11a5f39d (x_term_init): Unblock input around call1.
Gerd Moellmann <gerd@gnu.org>
parents: 28281
diff changeset
13177 BLOCK_INPUT;
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
13178 }
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
13179
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13180 dpyinfo->kboard->next_kboard = all_kboards;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13181 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
13182 /* 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
13183 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
13184 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
13185 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
13186 current_kboard = dpyinfo->kboard;
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13187 }
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13188 dpyinfo->kboard->reference_count++;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13189 }
10652
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
13190 #endif
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
13191
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13192 /* 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
13193 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
13194 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
13195
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13196 /* 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
13197 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
13198 x_display_name_list);
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13199 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
13200
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13201 dpyinfo->display = dpy;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13202
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13203 #if 0
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13204 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
13205 #endif /* ! 0 */
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13206
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13207 dpyinfo->x_id_name
21244
50929073a0ba Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 21017
diff changeset
13208 = (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
13209 + 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
13210 + 2);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13211 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
13212 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
13213
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
13214 /* 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
13215 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
13216
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
13217 /* 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
13218 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
13219 = 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
13220
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
13221 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
13222 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
13223 #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
13224 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
13225 #else
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
13226 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
13227 #endif
11162
95b70c82ec51 (x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents: 11122
diff changeset
13228 /* 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
13229 all versions. */
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13230 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
13231
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
13232 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
13233 DefaultScreen (dpyinfo->display));
27991
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13234 select_visual (dpyinfo);
27985
4ba445af210b (x_term_init): Set Colormap member of x_display_info
Gerd Moellmann <gerd@gnu.org>
parents: 27974
diff changeset
13235 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
13236 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
13237 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
13238 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
13239 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
13240 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
13241 dpyinfo->icon_bitmap_id = -1;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13242 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
13243 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
13244 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
13245 dpyinfo->bitmaps = 0;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13246 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
13247 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
13248 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
13249 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
13250 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
13251 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
13252 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
13253 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
13254 dpyinfo->mouse_face_window = Qnil;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13255 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
13256 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
13257 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
13258 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
13259 dpyinfo->x_highlight_frame = 0;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13260 dpyinfo->image_cache = make_image_cache ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13261
27985
4ba445af210b (x_term_init): Set Colormap member of x_display_info
Gerd Moellmann <gerd@gnu.org>
parents: 27974
diff changeset
13262 /* 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
13263 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
13264 {
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13265 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
13266 {
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13267 Lisp_Object value;
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13268 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
13269 build_string ("privateColormap"),
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13270 build_string ("PrivateColormap"),
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13271 Qnil, Qnil);
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13272 if (STRINGP (value)
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13273 && (!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
13274 || !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
13275 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
13276 }
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13277 }
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13278 else
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
13279 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
13280 dpyinfo->visual, AllocNone);
27985
4ba445af210b (x_term_init): Set Colormap member of x_display_info
Gerd Moellmann <gerd@gnu.org>
parents: 27974
diff changeset
13281
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13282 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13283 int screen_number = XScreenNumberOfScreen (dpyinfo->screen);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13284 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
13285 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
13286 dpyinfo->resy = pixels * 25.4 / mm;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13287 pixels = DisplayWidth (dpyinfo->display, screen_number);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13288 mm = DisplayWidthMM (dpyinfo->display, screen_number);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13289 dpyinfo->resx = pixels * 25.4 / mm;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13290 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13291
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
13292 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
13293 = 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
13294 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
13295 = 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
13296 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
13297 = 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
13298 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
13299 = 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
13300 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
13301 = 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
13302 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
13303 = 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
13304 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
13305 = 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
13306 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
13307 = 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
13308 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
13309 = 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
13310 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
13311 = 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
13312 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
13313 = XInternAtom (dpyinfo->display, "TEXT", False);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13314 dpyinfo->Xatom_COMPOUND_TEXT
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13315 = 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
13316 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
13317 = 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
13318 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
13319 = 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
13320 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
13321 = 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
13322 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
13323 = 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
13324 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
13325 = 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
13326 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
13327 = 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
13328 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
13329 = 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
13330 /* For properties of font. */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13331 dpyinfo->Xatom_PIXEL_SIZE
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13332 = XInternAtom (dpyinfo->display, "PIXEL_SIZE", False);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13333 dpyinfo->Xatom_MULE_BASELINE_OFFSET
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13334 = 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
13335 dpyinfo->Xatom_MULE_RELATIVE_COMPOSE
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13336 = 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
13337 dpyinfo->Xatom_MULE_DEFAULT_ASCENT
7cde34a6424e (dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents: 17050
diff changeset
13338 = 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
13339
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13340 /* Ghostscript support. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13341 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
13342 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
13343
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13344 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
13345 False);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13346
11162
95b70c82ec51 (x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents: 11122
diff changeset
13347 dpyinfo->cut_buffers_initialized = 0;
95b70c82ec51 (x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents: 11122
diff changeset
13348
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
13349 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
13350 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
13351
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13352 {
18705
c4f2eab8e736 (x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents: 18646
diff changeset
13353 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
13354
c4f2eab8e736 (x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents: 18646
diff changeset
13355 null_bits[0] = 0x00;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13356
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13357 dpyinfo->null_pixel
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13358 = XCreatePixmapFromBitmapData (dpyinfo->display, dpyinfo->root_window,
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13359 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
13360 1);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13361 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
13362
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13363 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13364 extern int gray_bitmap_width, gray_bitmap_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13365 extern unsigned char *gray_bitmap_bits;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13366 dpyinfo->gray
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13367 = XCreatePixmapFromBitmapData (dpyinfo->display, dpyinfo->root_window,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13368 gray_bitmap_bits,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13369 gray_bitmap_width, gray_bitmap_height,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13370 (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
13371 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13372
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
13373 #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
13374 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
13375 #endif
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
13376
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9565
diff changeset
13377 #ifdef subprocesses
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9565
diff changeset
13378 /* 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
13379 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
13380 add_keyboard_wait_descriptor (connection);
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9565
diff changeset
13381 #endif
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
13382
4147
c6657758fb6f * xterm.c (x_term_init): Adjust message printed when we can't
Jim Blandy <jimb@redhat.com>
parents: 3951
diff changeset
13383 #ifndef F_SETOWN_BUG
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13384 #ifdef F_SETOWN
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13385 #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
13386 /* 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
13387 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
13388 #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
13389 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
13390 #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
13391 #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
13392 #endif /* F_SETOWN_BUG */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13393
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13394 #ifdef SIGIO
11994
b4dd8ca308dd (x_term_init): Call init_sigio only if interrupt_input.
Karl Heuer <kwzh@gnu.org>
parents: 11988
diff changeset
13395 if (interrupt_input)
b4dd8ca308dd (x_term_init): Call init_sigio only if interrupt_input.
Karl Heuer <kwzh@gnu.org>
parents: 11988
diff changeset
13396 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
13397 #endif /* ! defined (SIGIO) */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13398
15904
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
13399 #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
13400 #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
13401 /* 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
13402 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
13403 {
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
13404 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
13405 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
13406 Font font;
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
13407 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
13408
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
13409 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
13410 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
13411 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
13412 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
13413 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
13414 to.addr = (XPointer)&font;
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
13415 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
13416 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
13417 abort ();
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
13418 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
13419 XrmPutLineResource (&xrdb, "Emacs.dialog.*.font: 9x15");
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
13420 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
13421 }
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
13422 #endif
19021
6f150e46a5fd (x_term_init) [! HAVE_X11R5]: Don't try to use XtCvtStringToFont.
Richard M. Stallman <rms@gnu.org>
parents: 18996
diff changeset
13423 #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
13424
28139
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
13425 /* See if we should run in synchronous mode. This is useful
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
13426 for debugging X code. */
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
13427 {
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
13428 Lisp_Object value;
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
13429 value = display_x_get_resource (dpyinfo,
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
13430 build_string ("synchronous"),
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
13431 build_string ("Synchronous"),
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
13432 Qnil, Qnil);
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
13433 if (STRINGP (value)
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
13434 && (!strcmp (XSTRING (value)->data, "true")
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
13435 || !strcmp (XSTRING (value)->data, "on")))
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
13436 XSynchronize (dpyinfo->display, True);
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
13437 }
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
13438
11997
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
13439 UNBLOCK_INPUT;
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
13440
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13441 return dpyinfo;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13442 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13443
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13444 /* 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
13445 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
13446
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13447 void
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13448 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
13449 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
13450 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13451 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
13452
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13453 /* 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
13454 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
13455 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
13456 && 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
13457 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
13458 else
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13459 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13460 Lisp_Object tail;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13461
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13462 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
13463 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
13464 {
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
13465 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
13466 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13467 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
13468 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13469 }
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
13470 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
13471 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13472 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13473
27524
67501e6e8b34 (x_delete_display): Update next_noop_dpyinfo to ensure
Gerd Moellmann <gerd@gnu.org>
parents: 27500
diff changeset
13474 if (next_noop_dpyinfo == dpyinfo)
67501e6e8b34 (x_delete_display): Update next_noop_dpyinfo to ensure
Gerd Moellmann <gerd@gnu.org>
parents: 27500
diff changeset
13475 next_noop_dpyinfo = dpyinfo->next;
67501e6e8b34 (x_delete_display): Update next_noop_dpyinfo to ensure
Gerd Moellmann <gerd@gnu.org>
parents: 27500
diff changeset
13476
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13477 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
13478 x_display_list = dpyinfo->next;
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13479 else
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13480 {
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13481 struct x_display_info *tail;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13482
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13483 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
13484 if (tail->next == dpyinfo)
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13485 tail->next = tail->next->next;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13486 }
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13487
12771
6f07c79d9a05 (x_delete_display) [AIX]: Don't call XRmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 12750
diff changeset
13488 #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
13489 #ifndef AIX /* On AIX, XCloseDisplay calls this. */
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13490 XrmDestroyDatabase (dpyinfo->xrdb);
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13491 #endif
12771
6f07c79d9a05 (x_delete_display) [AIX]: Don't call XRmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 12750
diff changeset
13492 #endif
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13493 #ifdef MULTI_KBOARD
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
13494 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
13495 delete_kboard (dpyinfo->kboard);
10652
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
13496 #endif
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
13497 #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
13498 if (dpyinfo->xim)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
13499 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
13500 #endif
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
13501
10652
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
13502 xfree (dpyinfo->font_table);
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
13503 xfree (dpyinfo->x_id_name);
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
13504 xfree (dpyinfo);
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13505 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13506
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13507 /* 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
13508
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13509 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
13510 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13511 x_produce_glyphs,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13512 x_write_glyphs,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13513 x_insert_glyphs,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13514 x_clear_end_of_line,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13515 x_scroll_run,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13516 x_after_update_window_line,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13517 x_update_window_begin,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13518 x_update_window_end,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13519 XTcursor_to,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13520 x_flush,
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
13521 x_clear_mouse_face,
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
13522 x_get_glyph_overhangs,
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
13523 x_fix_overlapping_area
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13524 };
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13525
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
13526 void
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13527 x_initialize ()
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13528 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13529 rif = &x_redisplay_interface;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13530
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13531 clear_frame_hook = x_clear_frame;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13532 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
13533 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
13534 delete_glyphs_hook = x_delete_glyphs;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13535 ring_bell_hook = XTring_bell;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13536 reset_terminal_modes_hook = XTreset_terminal_modes;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13537 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
13538 update_begin_hook = x_update_begin;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13539 update_end_hook = x_update_end;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13540 set_terminal_window_hook = XTset_terminal_window;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13541 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
13542 frame_up_to_date_hook = XTframe_up_to_date;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13543 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
13544 mouse_position_hook = XTmouse_position;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
13545 frame_rehighlight_hook = XTframe_rehighlight;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
13546 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
13547 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
13548 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
13549 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
13550 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
13551 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
13552
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
13553 scroll_region_ok = 1; /* we'll scroll partial frames */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13554 char_ins_del_ok = 0; /* just as fast to write the line */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13555 line_ins_del_ok = 1; /* we'll just blt 'em */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13556 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
13557 memory_below_frame = 0; /* we don't remember what scrolls
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13558 off the bottom */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13559 baud_rate = 19200;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13560
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13561 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
13562 last_tool_bar_item = -1;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13563 any_help_event_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13564
4476
e7de1b007447 (x_term_init): Set the hooks before we call Fset_input_mode.
Richard M. Stallman <rms@gnu.org>
parents: 4304
diff changeset
13565 /* 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
13566 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
13567
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13568 #ifdef USE_X_TOOLKIT
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13569 XtToolkitInitialize ();
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13570 Xt_app_con = XtCreateApplicationContext ();
12494
bfbe2490dbf0 (x_initialize) [USE_X_TOOLKIT]: Set fallback resources.
Richard M. Stallman <rms@gnu.org>
parents: 12431
diff changeset
13571 XtAppSetFallbackResources (Xt_app_con, Xt_default_resources);
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
13572
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
13573 /* Install an asynchronous timer that processes Xt timeout events
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
13574 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
13575 timeouts internally, for example the LessTif menu bar, or the
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
13576 Xaw3d scroll bar. When Xt timouts aren't processed, these
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
13577 widgets don't behave normally. */
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
13578 {
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
13579 EMACS_TIME interval;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
13580 EMACS_SET_SECS_USECS (interval, 0, 100000);
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
13581 start_atimer (ATIMER_CONTINUOUS, interval, x_process_timeouts, 0);
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
13582 }
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
13583 #endif
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
13584
26800
e828d4307ab9 (x_initialize): only setup xaw3d_* if they've been declared.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26789
diff changeset
13585 #if USE_TOOLKIT_SCROLL_BARS
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
13586 xaw3d_arrow_scroll = False;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
13587 xaw3d_pick_top = True;
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13588 #endif
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
13589
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
13590 /* 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
13591 original error handler. */
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
13592 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
13593 XSetIOErrorHandler (x_io_error_quitter);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13594
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13595 /* Disable Window Change signals; they are handled by X events. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13596 #ifdef SIGWINCH
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13597 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
13598 #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
13599
10743
6977bff3ff38 (x_display_bar_cursor): Use frame's cursor_width.
Richard M. Stallman <rms@gnu.org>
parents: 10652
diff changeset
13600 signal (SIGPIPE, x_connection_signal);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13601 }
395
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
13602
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13603
395
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
13604 void
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
13605 syms_of_xterm ()
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
13606 {
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
13607 staticpro (&x_error_message_string);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
13608 x_error_message_string = Qnil;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
13609
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
13610 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
13611 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
13612
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
13613 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
13614 last_mouse_scroll_bar = Qnil;
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
13615
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
13616 staticpro (&Qvendor_specific_keysyms);
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
13617 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
13618
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
13619 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
13620 last_mouse_press_frame = Qnil;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13621
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
13622 help_echo = Qnil;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13623 staticpro (&help_echo);
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
13624 help_echo_object = Qnil;
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
13625 staticpro (&help_echo_object);
30302
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
13626 help_echo_window = Qnil;
9a5ccf8784f3 (help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30214
diff changeset
13627 staticpro (&help_echo_window);
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
13628 previous_help_echo = Qnil;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13629 staticpro (&previous_help_echo);
30214
793f5a4e610b (help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents: 30197
diff changeset
13630 help_echo_pos = -1;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13631
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13632 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
13633 "*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
13634 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
13635 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
13636 x_stretch_cursor_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13637
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13638 DEFVAR_BOOL ("x-toolkit-scroll-bars-p", &x_toolkit_scroll_bars_p,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13639 "If not nil, Emacs uses toolkit scroll bars.");
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13640 #if USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13641 x_toolkit_scroll_bars_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13642 #else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13643 x_toolkit_scroll_bars_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13644 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13645
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13646 staticpro (&last_mouse_motion_frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13647 last_mouse_motion_frame = Qnil;
395
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
13648 }
14694
41de9b2640a1 (X_CONNECTION_LOCK_FLAG): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 14692
diff changeset
13649
41de9b2640a1 (X_CONNECTION_LOCK_FLAG): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 14692
diff changeset
13650 #endif /* not HAVE_X_WINDOWS */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
13651