annotate src/xterm.c @ 25191:3a5376feb9aa

(x_display_and_set_cursor): If cursor_in_echo_area, show hollow box cursor for windows other than echo_area_window, show normal cursor for echo_area_window.
author Gerd Moellmann <gerd@gnu.org>
date Fri, 06 Aug 1999 15:05:34 +0000
parents 710445260df6
children 621067279f19
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.
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2 Copyright (C) 1989, 93, 94, 95, 96, 1997, 1998, 1999
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3 Free Software Foundation, Inc.
286
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
2977
ddcad1457cd5 Move signal.h and stdio.h before config.h.
Richard M. Stallman <rms@gnu.org>
parents: 2958
diff changeset
25 /* 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
26 /* On HP-UX 8.0 signal.h loses if it comes after config.h. */
ddcad1457cd5 Move signal.h and stdio.h before config.h.
Richard M. Stallman <rms@gnu.org>
parents: 2958
diff changeset
27 /* 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
28 #include <signal.h>
ddcad1457cd5 Move signal.h and stdio.h before config.h.
Richard M. Stallman <rms@gnu.org>
parents: 2958
diff changeset
29
4696
1fc792473491 Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents: 4683
diff changeset
30 #include <config.h>
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
31
7902
22b9aaaf0302 Put stdio.h after config.h.
Richard M. Stallman <rms@gnu.org>
parents: 7870
diff changeset
32 #include <stdio.h>
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
33 #ifdef STDC_HEADERS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
34 #include <stdlib.h>
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
35 #endif
7902
22b9aaaf0302 Put stdio.h after config.h.
Richard M. Stallman <rms@gnu.org>
parents: 7870
diff changeset
36
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
37 #ifdef HAVE_X_WINDOWS
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
38
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
39 #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
40 #include "blockinput.h"
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
41
21933
58f3be08e692 Include syssignal.h after lisp.h.
Andreas Schwab <schwab@suse.de>
parents: 21903
diff changeset
42 /* 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
43 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
44 #include "syssignal.h"
58f3be08e692 Include syssignal.h after lisp.h.
Andreas Schwab <schwab@suse.de>
parents: 21903
diff changeset
45
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46 /* This may include sys/types.h, and that somehow loses
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
47 if this is not done before the other system files. */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
48 #include "xterm.h"
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
49 #include <X11/cursorfont.h>
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
50
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
51 #ifndef USG
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52 /* Load sys/types.h if not already loaded.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
53 In some systems loading it twice is suicidal. */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
54 #ifndef makedev
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
55 #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
56 #endif /* makedev */
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
57 #endif /* USG */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
58
16220
02044b05d8e0 Replaced symbol BSD with BSD_SYSTEM.
Karl Heuer <kwzh@gnu.org>
parents: 16209
diff changeset
59 #ifdef BSD_SYSTEM
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
60 #include <sys/ioctl.h>
16220
02044b05d8e0 Replaced symbol BSD with BSD_SYSTEM.
Karl Heuer <kwzh@gnu.org>
parents: 16209
diff changeset
61 #endif /* ! defined (BSD_SYSTEM) */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
62
3355
e0c2e8a2ef75 (XTread_socket, case KeyPress) [HPUX]: Test IsModifiedKey.
Richard M. Stallman <rms@gnu.org>
parents: 3284
diff changeset
63 #include "systty.h"
555
e09a318cf838 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 517
diff changeset
64 #include "systime.h"
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
65
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
66 #ifndef INCLUDED_FCNTL
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
67 #include <fcntl.h>
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
68 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
69 #include <ctype.h>
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
70 #include <errno.h>
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
71 #include <setjmp.h>
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
72 #include <sys/stat.h>
10366
5e8b43cd8e96 Don't include param.h.
Richard M. Stallman <rms@gnu.org>
parents: 10287
diff changeset
73 /* 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
74 /* #include <sys/param.h> */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
75
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
76 #include "charset.h"
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
77 #include "ccl.h"
23515
1e52542fb338 Include frame.h before fontset.h.
Kenichi Handa <handa@m17n.org>
parents: 23162
diff changeset
78 #include "frame.h"
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
79 #include "fontset.h"
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
80 #include "dispextern.h"
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
81 #include "termhooks.h"
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
82 #include "termopts.h"
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
83 #include "termchar.h"
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
84 #if 0
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
85 #include "sink.h"
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
86 #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
87 #endif /* ! 0 */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
88 #include "gnu.h"
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
89 #include "disptab.h"
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
90 #include "buffer.h"
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
91 #include "window.h"
8652
c2c1a477ddd5 Include keyboard.h.
Richard M. Stallman <rms@gnu.org>
parents: 8634
diff changeset
92 #include "keyboard.h"
8848
48b3ac951c53 Add #include "intervals.h"
Karl Heuer <kwzh@gnu.org>
parents: 8781
diff changeset
93 #include "intervals.h"
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
94 #include "process.h"
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
95
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
96 #ifdef USE_X_TOOLKIT
15117
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
97 #include <X11/Shell.h>
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
98 #endif
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
99
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
100 #include <sys/types.h>
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
101 #ifdef HAVE_SYS_TIME_H
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
102 #include <sys/time.h>
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
103 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
104 #ifdef HAVE_UNISTD_H
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
105 #include <unistd.h>
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
106 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
107
15117
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
108 #ifdef USE_X_TOOLKIT
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
109
5898
105c99071e9b (x_destroy_window) [USE_X_TOOLKIT]: Call free_frame_menubar.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 5872
diff changeset
110 extern void free_frame_menubar ();
13507
9a9f459075af (HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
111 extern FRAME_PTR x_menubar_window_to_frame ();
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
112
13507
9a9f459075af (HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
113 #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
114 #define HACK_EDITRES
6941
a914781ef58a (Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents: 6934
diff changeset
115 extern void _XEditResCheckMessages ();
13507
9a9f459075af (HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
116 #endif /* not NO_EDITRES */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
117
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
118 /* 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
119
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
120 #ifdef USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
121 #if defined USE_MOTIF
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
122 #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
123 #include <Xm/ScrollBar.h>
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
124 #include <Xm/ScrollBarP.h>
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
125 #elif defined HAVE_XAW3D
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
126 #include <X11/Xaw3d/Simple.h>
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
127 #include <X11/Xaw3d/ThreeD.h>
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
128 #include <X11/Xaw3d/Scrollbar.h>
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
129 #define ARROW_SCROLLBAR
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
130 #include <X11/Xaw3d/ScrollbarP.h>
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
131 #endif /* HAVE_XAW3D */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
132 #endif /* USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
133
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
134 #endif /* USE_X_TOOLKIT */
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
135
6022
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
136 #ifndef USE_X_TOOLKIT
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
137 #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
138 #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
139 #endif
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
140
7602
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
141 #ifdef USE_X_TOOLKIT
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
142 #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
143 #ifndef XtNinitialState
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
144 #define XtNinitialState "initialState"
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
145 #endif
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
146 #endif
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
147
14963
6ac4f300f9b4 Include locale.h if HAVE_SETLOCALE.
Richard M. Stallman <rms@gnu.org>
parents: 14946
diff changeset
148 #ifdef HAVE_SETLOCALE
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
149 /* So we can do setlocale. */
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
150 #include <locale.h>
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
151 #endif
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
152
14305
3cc44eaf9ebf (x_connection_signal): Explicitly check the thread interlock
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
153 #ifdef SOLARIS2
15292
558d7f9e06ef [SOLARIS2]: Include string.h.
Karl Heuer <kwzh@gnu.org>
parents: 15200
diff changeset
154 /* 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
155 <string.h> is included beforehand. The declaration for memmove in
558d7f9e06ef [SOLARIS2]: Include string.h.
Karl Heuer <kwzh@gnu.org>
parents: 15200
diff changeset
156 <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
157 #include <string.h>
558d7f9e06ef [SOLARIS2]: Include string.h.
Karl Heuer <kwzh@gnu.org>
parents: 15200
diff changeset
158 #endif
558d7f9e06ef [SOLARIS2]: Include string.h.
Karl Heuer <kwzh@gnu.org>
parents: 15200
diff changeset
159
14522
9cee3e7c6468 (min, max): Don't define if already defined.
Richard M. Stallman <rms@gnu.org>
parents: 14489
diff changeset
160 #ifndef min
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
161 #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
162 #endif
9cee3e7c6468 (min, max): Don't define if already defined.
Richard M. Stallman <rms@gnu.org>
parents: 14489
diff changeset
163 #ifndef max
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
164 #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
165 #endif
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 abs(x) ((x) < 0 ? -(x) : (x))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
168
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
169 #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
170
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
171
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
172 /* Bitmaps for truncated lines. */
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 enum bitmap_type
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
175 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
176 NO_BITMAP,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
177 LEFT_TRUNCATION_BITMAP,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
178 RIGHT_TRUNCATION_BITMAP,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
179 OVERLAY_ARROW_BITMAP,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
180 CONTINUED_LINE_BITMAP,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
181 CONTINUATION_LINE_BITMAP,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
182 ZV_LINE_BITMAP
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
183 };
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
184
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
185 /* 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
186 `indicate-empty-lines' is non-nil. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
187
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
188 #define zv_width 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
189 #define zv_height 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
190 static unsigned char zv_bits[] = {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
191 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
192
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
193 /* An arrow like this: `<-'. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
194
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
195 #define left_width 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
196 #define left_height 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
197 static unsigned char left_bits[] = {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
198 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
199
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
200 /* Marker for continued lines. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
201
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
202 #define continued_width 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
203 #define continued_height 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
204 static unsigned char continued_bits[] = {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
205 0x30, 0x30, 0x30, 0x30, 0xb4, 0xfc, 0x78, 0x30};
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
206
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
207 #define continuation_width 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
208 #define continuation_height 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
209 static unsigned char continuation_bits[] = {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
210 0x0c, 0x1e, 0x3f, 0x2d, 0x0c, 0x0c, 0x0c, 0x0c};
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
211
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
212 /* Right truncation arrow bitmap `->'. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
213
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
214 #define right_width 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
215 #define right_height 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
216 static unsigned char right_bits[] = {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
217 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
218
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
219 /* Overlay arrow bitmap; a filled `<>'. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
220
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
221 #if 1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
222 #define ov_width 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
223 #define ov_height 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
224 static unsigned char ov_bits[] = {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
225 0x30, 0x08, 0x3c, 0x7e, 0x7a, 0x7a, 0x62, 0x3c};
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
226
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
227 #elif 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
228 #define ov_width 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
229 #define ov_height 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
230 static unsigned char ov_bits[] = {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
231 0x18, 0x04, 0x08, 0x1c, 0x3e, 0x3a, 0x32, 0x1c};
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
232 #else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
233 #define ov_width 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
234 #define ov_height 8
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
235 static unsigned char ov_bits[] = {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
236 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x3c, 0x18};
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
237 #endif
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 extern Lisp_Object Qhelp_echo;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
240
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
241
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
242 /* 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
243
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
244 int x_toolkit_scroll_bars_p;
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 /* 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
247 (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
248
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
249 static Lisp_Object help_echo;
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
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
303
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
304 /* Mouse movement.
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
305
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
306 Formerly, we used PointerMotionHintMask (in standard_event_mask)
15042
c99dd01d9334 (note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 14963
diff changeset
307 so that we would have to call XQueryPointer after each MotionNotify
c99dd01d9334 (note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 14963
diff changeset
308 event to ask for another such event. However, this made mouse tracking
c99dd01d9334 (note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 14963
diff changeset
309 slow, and there was a bug that made it eventually stop.
c99dd01d9334 (note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 14963
diff changeset
310
c99dd01d9334 (note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 14963
diff changeset
311 Simply asking for MotionNotify all the time seems to work better.
c99dd01d9334 (note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 14963
diff changeset
312
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
313 In order to avoid asking for motion events and then throwing most
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
314 of them away or busy-polling the server for mouse positions, we ask
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
315 the server for pointer motion hints. This means that we get only
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
316 one event per group of mouse movements. "Groups" are delimited by
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
317 other kinds of events (focus changes and button clicks, for
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
318 example), or by XQueryPointer calls; when one of these happens, we
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
319 get another MotionNotify event the next time the mouse moves. This
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
320 is at least as efficient as getting motion events when mouse
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
321 tracking is on, and I suspect only negligibly worse when tracking
15042
c99dd01d9334 (note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 14963
diff changeset
322 is off. */
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
323
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
324 /* Where the mouse was last time we reported a mouse event. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
325
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
326 FRAME_PTR last_mouse_frame;
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
327 static XRectangle last_mouse_glyph;
15803
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
328 static Lisp_Object last_mouse_press_frame;
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
329
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
330 /* The scroll bar in which the last X motion event occurred.
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
331
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
332 If the last X motion event occurred in a scroll bar, we set this so
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
333 XTmouse_position can know whether to report a scroll bar motion or
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
334 an ordinary motion.
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
335
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
336 If the last X motion event didn't occur in a scroll bar, we set
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
337 this to Qnil, to tell XTmouse_position to return an ordinary motion
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
338 event. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
339
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
340 static Lisp_Object last_mouse_scroll_bar;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
341
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
342 /* This is a hack. We would really prefer that XTmouse_position would
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
343 return the time associated with the position it returns, but there
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
344 doesn't seem to be any way to wrest the time-stamp from the server
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
345 along with the position query. So, we just keep track of the time
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
346 of the last movement we received, and return that in hopes that
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
347 it's somewhat accurate. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
348
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
349 static Time last_mouse_movement_time;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
350
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
351 /* Incremented by XTread_socket whenever it really tries to read
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
352 events. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
353
9337
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
354 #ifdef __STDC__
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
355 static int volatile input_signal_count;
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
356 #else
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
357 static int input_signal_count;
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
358 #endif
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
359
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
360 /* Used locally within XTread_socket. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
361
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
362 static int x_noop_count;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
363
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
364 /* Initial values of argv and argc. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
365
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
366 extern char **initial_argv;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
367 extern int initial_argc;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
368
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
369 extern Lisp_Object Vcommand_line_args, Vsystem_name;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
370
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
371 /* Tells if a window manager is present or not. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
372
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
373 extern Lisp_Object Vx_no_window_manager;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
374
6941
a914781ef58a (Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents: 6934
diff changeset
375 extern Lisp_Object Qface, Qmouse_face;
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
376
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
377 extern int errno;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
378
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
379 /* A mask of extra modifier bits to put into every keyboard char. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
380
1841
338e4ffdb54b (XTread_socket): Support extra_keyboard_modifiers.
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
381 extern int extra_keyboard_modifiers;
338e4ffdb54b (XTread_socket): Support extra_keyboard_modifiers.
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
382
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
383 static Lisp_Object Qvendor_specific_keysyms;
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
384
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
385 extern XrmDatabase x_load_resources ();
11915
e2ab839155e1 (XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents: 11904
diff changeset
386 extern Lisp_Object x_icon_type ();
e2ab839155e1 (XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents: 11904
diff changeset
387
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
388
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
389 /* Enumeration for overriding/changing the face to use for drawing
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
390 glyphs in x_draw_glyphs. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
391
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
392 enum draw_glyphs_face
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
393 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
394 DRAW_NORMAL_TEXT,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
395 DRAW_INVERSE_VIDEO,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
396 DRAW_CURSOR,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
397 DRAW_MOUSE_FACE,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
398 DRAW_IMAGE_RAISED,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
399 DRAW_IMAGE_SUNKEN
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
400 };
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
401
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
402 static void x_update_window_end P_ ((struct window *, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
403 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
404 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
405 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
406 unsigned));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
407 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
408 int *, int *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
409 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
410 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
411 int *, int *, int *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
412 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
413 static void x_check_font P_ ((struct frame *, XFontStruct *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
414 static void note_mouse_highlight P_ ((struct frame *, int, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
415 static void note_toolbar_highlight P_ ((struct frame *f, int, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
416 static void x_handle_toolbar_click P_ ((struct frame *, XButtonEvent *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
417 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
418 enum draw_glyphs_face));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
419 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
420 int x_catch_errors P_ ((Display *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
421 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
422 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
423 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
424 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
425 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
426 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
427 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
428 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
429 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
430 void x_initialize P_ ((void));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
431 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
432 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
433 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
434 struct glyph_row *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
435 enum draw_glyphs_face));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
436 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
437 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
438 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
439 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
440 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
441 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
442 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
443 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
444 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
445 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
446 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
447 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
448 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
449 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
450 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
451 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
452 static void x_draw_hollow_cursor P_ ((struct window *, struct glyph_row *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
453 static void x_draw_bar_cursor P_ ((struct window *, struct glyph_row *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
454 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
455 XRectangle *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
456 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
457 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
458 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
459 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
460 XRectangle *, enum glyph_row_area));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
461 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
462 XRectangle *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
463 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
464 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
465 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
466 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
467 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
468 enum bitmap_type));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
469
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
470 static void 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
471 GC, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
472 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
473 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
474 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
475 static void x_flush P_ ((struct frame *f));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
476
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
477
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
478 /* 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
479
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
480 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
481 x_flush (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
482 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
483 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
484 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
485 if (f == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
486 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
487 Lisp_Object rest, frame;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
488 FOR_EACH_FRAME (rest, frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
489 x_flush (XFRAME (frame));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
490 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
491 else if (FRAME_X_P (f))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
492 XFlush (FRAME_X_DISPLAY (f));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
493 UNBLOCK_INPUT;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
496
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
497 /* 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
498 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
499 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
500 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
501 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
502 performance. */
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 #define XFlush(DISPLAY) (void) 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
505
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
506
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
507 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
508 Debugging
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
509 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
510
12192
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
511 #if 0
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
512
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
513 /* 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
514 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
515
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
516 struct record
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
517 {
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
518 char *locus;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
519 int type;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
520 };
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
521
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
522 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
523
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
524 int event_record_index;
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 record_event (locus, type)
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
527 char *locus;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
528 int type;
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 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
531 event_record_index = 0;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
532
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
533 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
534 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
535 event_record_index++;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
536 }
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
537
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
538 #endif /* 0 */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
539
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
540
12192
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
541
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
542 /* 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
543
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
544 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
545 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
546 Display *dpy;
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
547 {
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
548 struct x_display_info *dpyinfo;
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
549
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
550 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
551 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
552 return dpyinfo;
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
553
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
554 return 0;
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
555 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
556
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
557
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
558
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
559 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
560 Starting and ending an update
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
561 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
562
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
563 /* 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
564 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
565 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
566 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
567 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
568
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
569 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
570 x_update_begin (f)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
571 struct frame *f;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
572 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
573 /* Nothing to do. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
574 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
575
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
576
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
577 /* Start 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
578 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
579 position of W. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
580
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
581 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
582 x_update_window_begin (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
583 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
584 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
585 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
586 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
587
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
588 updated_window = w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
589 set_output_cursor (&w->cursor);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
590
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
591 BLOCK_INPUT;
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
592
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
593 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
594 {
6660
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
595 /* 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
596 display_info->mouse_face_defer = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
597
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
598 /* 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
599 highlighting. */
10274
83aaf59dabbe (XTupdate_begin): Fix backward test in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 10223
diff changeset
600 if (FRAME_GARBAGED_P (f))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
601 display_info->mouse_face_window = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
602
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
603 /* 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
604 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
605 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
606 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
607 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
608 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
609 && 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
610 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
611 int i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
612
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
613 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
614 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
615 break;
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
616
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
617 if (i < w->desired_matrix->nrows)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
618 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
619 }
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
620 }
8781
98741404d3e0 Delete X11 conditionals.
Richard M. Stallman <rms@gnu.org>
parents: 8724
diff changeset
621
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
622 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
623 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
624
24991
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 /* 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
627 have vertical scroll bars. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
628
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
629 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
630 x_draw_vertical_border (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
631 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
632 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
633 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
634
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
635 /* 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
636 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
637 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
638 neighbor will suffice as a border. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
639 if (!WINDOW_RIGHTMOST_P (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
640 && !FRAME_HAS_VERTICAL_SCROLL_BARS (f))
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 int x0, x1, y0, y1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
643
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
644 window_box_edges (w, -1, &x0, &y0, &x1, &y1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
645 x1 += FRAME_X_FLAGS_AREA_WIDTH (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
646 y1 -= 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
647
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
648 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
649 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
650 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
651 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
652
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
653
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
654 /* End update of window W (which is equal to updated_window). Draw
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
655 vertical borders between horizontally adjacent windows, and display
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
656 W's cursor if CURSOR_ON_P is non-zero. W may be a menu bar
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
657 pseudo-window in case we don't have X toolkit support. Such
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
658 windows don't have a cursor, so don't display it here. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
659
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
660 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
661 x_update_window_end (w, cursor_on_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
662 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
663 int cursor_on_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
664 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
665 if (!w->pseudo_window_p)
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 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
668 if (cursor_on_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
669 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
670 output_cursor.vpos,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
671 output_cursor.x, output_cursor.y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
672 x_draw_vertical_border (w);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
673 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
674 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
675
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
676 updated_window = NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
677 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
678
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
679
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
680 /* 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
681 update_end. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
682
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
683 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
684 x_update_end (f)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
685 struct frame *f;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
686 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
687 /* Mouse highlight may be displayed again. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
688 FRAME_X_DISPLAY_INFO (f)->mouse_face_defer = 0;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
689
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
690 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
691 XFlush (FRAME_X_DISPLAY (f));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
692 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
693 }
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
694
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
695
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
696 /* 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
697 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
698 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
699
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
700 static void
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
701 XTframe_up_to_date (f)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
702 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
703 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
704 if (FRAME_X_P (f))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
705 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
706 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
707 if (dpyinfo->mouse_face_deferred_gc
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
708 || f == dpyinfo->mouse_face_mouse_frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
709 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
710 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
711 if (dpyinfo->mouse_face_mouse_frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
712 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
713 dpyinfo->mouse_face_mouse_x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
714 dpyinfo->mouse_face_mouse_y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
715 dpyinfo->mouse_face_deferred_gc = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
716 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
717 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
718 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
719 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
720
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
721
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
722 /* 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
723 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
724 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
725 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
726 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
727 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
728
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
729 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
730 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
731 struct glyph_row *desired_row;
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 struct window *w = updated_window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
734
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
735 xassert (w);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
736
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
737 if (!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
738 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
739 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
740 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
741
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
742 /* 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
743 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
744 if (windows_or_buffers_changed)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
745 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
746 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
747 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
748 int height = desired_row->visible_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
749 int x = window_box_right (w, -1) + FRAME_X_FLAGS_AREA_WIDTH (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
750 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
751
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
752 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
753 x, y, width, height, False);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
754 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
755
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
756 UNBLOCK_INPUT;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
761 /* 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
762 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
763 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
764 drawn. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
765
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
766 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
767 x_draw_bitmap (w, row, which)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
768 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
769 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
770 enum bitmap_type which;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
771 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
772 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
773 Display *display = FRAME_X_DISPLAY (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
774 Window window = FRAME_X_WINDOW (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
775 int x, y, wd, h, dy;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
776 unsigned char *bits;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
777 Pixmap pixmap;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
778 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
779 struct face *face;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
780 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
781
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
782 /* 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
783 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
784
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
785 switch (which)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
786 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
787 case LEFT_TRUNCATION_BITMAP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
788 wd = left_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
789 h = left_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
790 bits = left_bits;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
791 x = (WINDOW_TO_FRAME_PIXEL_X (w, 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
792 - wd
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
793 - (FRAME_X_FLAGS_AREA_WIDTH (f) - wd) / 2);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
794 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
795
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
796 case OVERLAY_ARROW_BITMAP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
797 wd = left_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
798 h = left_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
799 bits = ov_bits;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
800 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
801 - wd
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
802 - (FRAME_X_FLAGS_AREA_WIDTH (f) - wd) / 2);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
803 break;
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 case RIGHT_TRUNCATION_BITMAP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
806 wd = right_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
807 h = right_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
808 bits = right_bits;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
809 x = window_box_right (w, -1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
810 x += (FRAME_X_FLAGS_AREA_WIDTH (f) - wd) / 2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
811 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
812
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
813 case CONTINUED_LINE_BITMAP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
814 wd = right_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
815 h = right_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
816 bits = continued_bits;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
817 x = window_box_right (w, -1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
818 x += (FRAME_X_FLAGS_AREA_WIDTH (f) - wd) / 2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
819 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
820
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
821 case CONTINUATION_LINE_BITMAP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
822 wd = continuation_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
823 h = continuation_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
824 bits = continuation_bits;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
825 x = (WINDOW_TO_FRAME_PIXEL_X (w, 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
826 - wd
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
827 - (FRAME_X_FLAGS_AREA_WIDTH (f) - wd) / 2);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
828 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
829
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
830 case ZV_LINE_BITMAP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
831 wd = zv_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
832 h = zv_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
833 bits = zv_bits;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
834 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
835 - wd
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
836 - (FRAME_X_FLAGS_AREA_WIDTH (f) - wd) / 2);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
837 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
838
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
839 default:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
840 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
841 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
842
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
843 /* 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
844 start drawing the bitmap. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
845 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
846 dy = (row->height - h) / 2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
847
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
848 /* 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
849 by the server. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
850 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
851 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
852 face->foreground,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
853 face->background, depth);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
854 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
855 XFreePixmap (display, pixmap);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
856 XSetClipMask (display, gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
857 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
858
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
859
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
860 /* 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
861 function with input blocked. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
862
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
863 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
864 x_draw_row_bitmaps (w, row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
865 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
866 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
867 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
868 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
869 enum bitmap_type bitmap;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
870 struct face *face;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
871 int top_line_height = -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
872
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
873 xassert (interrupt_input_blocked);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
874
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
875 /* 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
876 don't have to draw anything. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
877 if (row->visible_height <= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
878 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
879
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
880 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
881 PREPARE_FACE_FOR_DISPLAY (f, face);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
882
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
883 /* 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
884 if (row->overlay_arrow_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
885 bitmap = OVERLAY_ARROW_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
886 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
887 bitmap = LEFT_TRUNCATION_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
888 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
889 bitmap = CONTINUATION_LINE_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
890 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
891 bitmap = ZV_LINE_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
892 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
893 bitmap = NO_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
894
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
895 /* 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
896 the flags area. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
897 if (bitmap == NO_BITMAP
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
898 || FRAME_FLAGS_BITMAP_WIDTH (f) < FRAME_X_FLAGS_AREA_WIDTH (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
899 || 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
900 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
901 /* 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
902 int border = ((XFASTINT (w->left) > 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
903 && !FRAME_HAS_VERTICAL_SCROLL_BARS (f))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
904 ? 1 : 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
905 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
906
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
907 if (top_line_height < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
908 top_line_height = WINDOW_DISPLAY_TOP_LINE_HEIGHT (w);
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
909
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
910 /* 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
911 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
912 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
913 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
914 if (face->stipple)
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
915 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
916 else
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
917 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
918
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
919 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
920 face->gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
921 (left
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
922 - FRAME_X_FLAGS_AREA_WIDTH (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
923 + border),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
924 WINDOW_TO_FRAME_PIXEL_Y (w, max (top_line_height,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
925 row->y)),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
926 FRAME_X_FLAGS_AREA_WIDTH (f) - border,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
927 row->visible_height);
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
928 if (!face->stipple)
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
929 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
930 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
931
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
932 /* Draw the left bitmap. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
933 if (bitmap != NO_BITMAP)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
934 x_draw_bitmap (w, row, bitmap);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
935
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
936 /* 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
937 if (row->truncated_on_right_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
938 bitmap = RIGHT_TRUNCATION_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
939 else if (row->continued_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
940 bitmap = CONTINUED_LINE_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
941 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
942 bitmap = NO_BITMAP;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
943
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
944 /* 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
945 the flags area. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
946 if (bitmap == NO_BITMAP
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
947 || FRAME_FLAGS_BITMAP_WIDTH (f) < FRAME_X_FLAGS_AREA_WIDTH (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
948 || 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
949 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
950 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
951
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
952 if (top_line_height < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
953 top_line_height = WINDOW_DISPLAY_TOP_LINE_HEIGHT (w);
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
954
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
955 /* 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
956 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
957 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
958 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
959 if (face->stipple)
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
960 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
961 else
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
962 XSetForeground (FRAME_X_DISPLAY (f), face->gc, face->background);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
963 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
964 face->gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
965 right,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
966 WINDOW_TO_FRAME_PIXEL_Y (w, max (top_line_height,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
967 row->y)),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
968 FRAME_X_FLAGS_AREA_WIDTH (f),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
969 row->visible_height);
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
970 if (!face->stipple)
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
971 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
972 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
973
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
974 /* Draw the right bitmap. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
975 if (bitmap != NO_BITMAP)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
976 x_draw_bitmap (w, row, bitmap);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
977 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
978
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
979
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
980 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
981 Line Highlighting
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
984 /* 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
985 frames. Aborts when called. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
986
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
987 static void
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
988 XTreassert_line_highlight (new, vpos)
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
989 int new, vpos;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
990 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
991 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
992 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
993
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
994
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
995 /* 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
996 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
997 called. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
998
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
999 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1000 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
1001 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
1002 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1003 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1004 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1005
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1006
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1007 /* 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
1008 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
1009 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
1010 rarely happens). */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1011
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
1012 static void
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1013 XTset_terminal_modes ()
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1014 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1015 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1016
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1017 /* 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
1018 the X-windows go away, and suspending requires no action. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1019
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
1020 static void
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1021 XTreset_terminal_modes ()
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1022 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1023 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1024
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1025
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1026
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1027 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1028 Output Cursor
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1029 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1030
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1031 /* 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
1032 positions are relative to updated_window. */
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 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1035 set_output_cursor (cursor)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1036 struct cursor_pos *cursor;
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 output_cursor.hpos = cursor->hpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1039 output_cursor.vpos = cursor->vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1040 output_cursor.x = cursor->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1041 output_cursor.y = cursor->y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1042 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1043
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 /* Set a nominal cursor position.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1046
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1047 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
1048 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
1049
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1050 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
1051 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
1052 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
1053 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
1054
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1055 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1056 XTcursor_to (vpos, hpos, y, x)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1057 int vpos, hpos, y, x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1058 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1059 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1060
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1061 /* 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
1062 if (updated_window)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1063 w = updated_window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1064 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1065 w = XWINDOW (selected_window);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1066
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1067 /* Set the output cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1068 output_cursor.hpos = hpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1069 output_cursor.vpos = vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1070 output_cursor.x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1071 output_cursor.y = y;
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 /* 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
1074 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
1075 if (updated_window == NULL)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1076 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1077 BLOCK_INPUT;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1078 x_display_cursor (w, 1, hpos, vpos, x, y);
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
1079 XFlush (FRAME_X_DISPLAY (selected_frame));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1080 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1081 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1082 }
24991
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
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1085
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1086 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1087 Display Iterator
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1090 /* Function prototypes of this page. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1091
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1092 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
1093 struct glyph *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1094 XChar2b *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1095 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
1096 int, XChar2b *, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1097 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
1098 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
1099 static void x_append_glyph P_ ((struct it *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1100 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
1101 int, int, double));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1102 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
1103 static void x_produce_special_glyphs P_ ((struct it *, enum display_element_type));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1104 static void x_produce_image_glyph P_ ((struct it *it));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1105
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1106
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1107 /* Return a pointer to per-char metric information in FONT of a
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1108 character pointed by B which is a pointer to an XChar2b. */
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
1109
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
1110 #define PER_CHAR_METRIC(font, b) \
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
1111 ((font)->per_char \
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
1112 ? ((font)->per_char + (b)->byte2 - (font)->min_char_or_byte2 \
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
1113 + (((font)->min_byte1 || (font)->max_byte1) \
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
1114 ? (((b)->byte1 - (font)->min_byte1) \
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
1115 * ((font)->max_char_or_byte2 - (font)->min_char_or_byte2 + 1)) \
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
1116 : 0)) \
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
1117 : &((font)->max_bounds))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
1118
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1119
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1120 /* Get metrics of character CHAR2B in FONT. Value is always non-null.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1121 If CHAR2B is not contained in FONT, the font's default character
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1122 metric is returned. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1123
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1124 static INLINE XCharStruct *
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1125 x_per_char_metric (font, char2b)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1126 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1127 XChar2b *char2b;
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 /* The result metric information. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1130 XCharStruct *pcm = NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1131
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1132 xassert (font && char2b);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1133
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1134 if (font->per_char != NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1135 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1136 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
1137 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1138 /* 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
1139 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
1140 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
1141 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
1142 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
1143 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
1144 if (char2b->byte1 == 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1145 && 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
1146 && 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
1147 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
1148 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1149 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1150 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1151 /* 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
1152 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
1153 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
1154 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
1155
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1156 byte1 = N/D + min_byte1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1157 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
1158
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1159 where:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1160
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1161 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
1162 / = integer division
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1163 \ = integer modulus */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1164 if (char2b->byte1 >= font->min_byte1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1165 && char2b->byte1 <= font->max_byte1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1166 && 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
1167 && 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
1168 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1169 pcm = (font->per_char
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1170 + ((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
1171 * (char2b->byte1 - font->min_byte1))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1172 + (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
1173 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1174 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1175 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1176 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1177 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1178 /* 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
1179 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
1180 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
1181 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
1182 && 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
1183 pcm = &font->max_bounds;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1184 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1185
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1186
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1187 if (pcm == NULL || pcm->width == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1188 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1189 /* Character not contained in the font. FONT->default_char
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1190 gives the character that will be printed. FONT->default_char
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1191 is a 16-bit character code with byte1 in the most significant
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1192 byte and byte2 in the least significant byte. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1193 XChar2b default_char;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1194 default_char.byte1 = (font->default_char >> BITS_PER_CHAR) & 0xff;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1195 default_char.byte2 = font->default_char & 0xff;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1196
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1197 /* Avoid an endless recursion if FONT->default_char itself
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1198 hasn't per char metrics. handa@etl.go.jp reports that some
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1199 fonts have this problem. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1200 if (default_char.byte1 != char2b->byte1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1201 || default_char.byte2 != char2b->byte2)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1202 pcm = x_per_char_metric (font, &default_char);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1203 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1204 pcm = &font->max_bounds;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1205 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1206
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1207 return pcm;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1208 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1209
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1210
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1211 /* 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
1212 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
1213
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1214 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1215 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
1216 int c;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1217 XChar2b *char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1218 struct font_info *font_info;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1219 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1220 int charset = CHAR_CHARSET (c);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1221 XFontStruct *font = font_info->font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1222
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1223 /* 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
1224 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
1225 fixed encoding. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1226 if (font_info->font_encoder)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1227 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1228 /* It's a program. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1229 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
1230
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1231 if (CHARSET_DIMENSION (charset) == 1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1232 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1233 ccl->reg[0] = charset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1234 ccl->reg[1] = char2b->byte2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1235 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1236 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1237 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1238 ccl->reg[0] = charset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1239 ccl->reg[1] = char2b->byte1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1240 ccl->reg[2] = char2b->byte2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1241 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1242
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1243 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
1244
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1245 /* 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
1246 program. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1247 if (font->max_byte1 == 0) /* 1-byte font */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1248 char2b->byte2 = ccl->reg[1];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1249 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1250 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
1251 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1252 else if (font_info->encoding[charset])
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1253 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1254 /* 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
1255 encoding numbers. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1256 int enc = font_info->encoding[charset];
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 if ((enc == 1 || enc == 2)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1259 && CHARSET_DIMENSION (charset) == 2)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1260 char2b->byte1 |= 0x80;
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 if (enc == 1 || enc == 3)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1263 char2b->byte2 |= 0x80;
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 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1266
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1267
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1268 /* 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
1269 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
1270 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
1271 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
1272
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1273 static INLINE struct face *
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1274 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
1275 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1276 int c, face_id;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1277 XChar2b *char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1278 int multibyte_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1279 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1280 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
1281
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1282 if (!multibyte_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1283 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1284 /* 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
1285 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
1286 char2b->byte1 = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1287 char2b->byte2 = c;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1288
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1289 if (!FACE_SUITABLE_FOR_CHARSET_P (face, -1))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1290 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1291 face_id = FACE_FOR_CHARSET (f, face_id, -1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1292 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
1293 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1294 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1295 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
1296 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1297 /* 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
1298 char2b->byte1 = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1299 char2b->byte2 = c;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1300 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1301 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1302 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1303 int c1, c2, charset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1304
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1305 /* 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
1306 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
1307 SPLIT_CHAR (c, charset, c1, c2);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1308 if (c2 > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1309 char2b->byte1 = c1, char2b->byte2 = c2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1310 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1311 char2b->byte1 = 0, char2b->byte2 = c1;
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 /* Get the face for displaying C. If `face' is not suitable for
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1314 charset, get the one that fits. (This can happen for the
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1315 translations of composite characters where the glyph
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1316 specifies a face for ASCII, but translations have a different
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1317 charset.) */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1318 if (!FACE_SUITABLE_FOR_CHARSET_P (face, charset))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1319 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1320 face_id = FACE_FOR_CHARSET (f, face_id, charset);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1321 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
1322 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1323
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1324 /* Maybe encode the character in *CHAR2B. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1325 if (charset != CHARSET_ASCII)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1326 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1327 struct font_info *font_info
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1328 = 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
1329 if (font_info)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1330 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1331 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
1332 if (charset == charset_latin_iso8859_1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1333 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1334 xassert (((XFontStruct *) font_info->font)->max_char_or_byte2
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1335 >= 0x80);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1336 char2b->byte2 |= 0x80;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1337 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1338 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1339 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1340 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1341
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1342 /* 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
1343 xassert (face != NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1344 PREPARE_FACE_FOR_DISPLAY (f, face);
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 return face;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1347 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1348
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1349
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1350 /* Get face and two-byte form of character glyph GLYPH on frame F.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1351 The encoding of GLYPH->u.ch.code is returned in *CHAR2B. Value is
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1352 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
1353
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1354 static INLINE struct face *
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1355 x_get_glyph_face_and_encoding (f, glyph, char2b)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1356 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1357 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1358 XChar2b *char2b;
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 struct face *face;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1361
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1362 xassert (glyph->type == CHAR_GLYPH);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1363 face = FACE_FROM_ID (f, glyph->u.ch.face_id);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1364
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1365 if (!glyph->multibyte_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1366 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1367 /* 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
1368 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
1369 char2b->byte1 = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1370 char2b->byte2 = glyph->u.ch.code;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1371 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1372 else if (glyph->u.ch.code < 128
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1373 && glyph->u.ch.face_id < BASIC_FACE_ID_SENTINEL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1374 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1375 /* 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
1376 char2b->byte1 = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1377 char2b->byte2 = glyph->u.ch.code;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1378 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1379 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1380 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1381 int c1, c2, charset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1382
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1383 /* 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
1384 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
1385 SPLIT_CHAR (glyph->u.ch.code, charset, c1, c2);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1386 if (c2 > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1387 char2b->byte1 = c1, char2b->byte2 = c2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1388 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1389 char2b->byte1 = 0, char2b->byte2 = c1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1390
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1391 /* Maybe encode the character in *CHAR2B. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1392 if (charset != CHARSET_ASCII)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1393 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1394 struct font_info *font_info
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1395 = 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
1396 if (font_info)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1397 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1398 x_encode_char (glyph->u.ch.code, char2b, font_info);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1399 if (charset == charset_latin_iso8859_1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1400 char2b->byte2 |= 0x80;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1401 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1402 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1403 }
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 /* 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
1406 xassert (face != NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1407 PREPARE_FACE_FOR_DISPLAY (f, face);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1408 return face;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1409 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1410
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 /* 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
1413 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
1414
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1415 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1416 x_append_glyph (it)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1417 struct it *it;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1418 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1419 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1420 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
1421
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1422 xassert (it->glyph_row);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1423 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
1424
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1425 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
1426 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
1427 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1428 /* Play it safe. If sub-structures of the glyph are not all the
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1429 same size, it otherwise be that some bits stay set. This
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1430 would prevent a comparison with GLYPH_EQUAL_P. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1431 glyph->u.val = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1432
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1433 glyph->type = CHAR_GLYPH;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1434 glyph->pixel_width = it->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1435 glyph->u.ch.code = it->char_to_display;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1436 glyph->u.ch.face_id = it->face_id;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1437 glyph->charpos = CHARPOS (it->position);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1438 glyph->object = it->object;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1439 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
1440 glyph->right_box_line_p = it->end_of_box_run_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1441 glyph->voffset = it->voffset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1442 glyph->multibyte_p = it->multibyte_p;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1443 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
1444 || it->phys_descent > it->descent);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1445 ++it->glyph_row->used[area];
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 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1448
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1449
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1450 /* 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
1451 IT->voffset. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1452
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1453 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1454 take_vertical_position_into_account (it)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1455 struct it *it;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1456 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1457 if (it->voffset)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1458 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1459 if (it->voffset < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1460 /* 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
1461 in the line. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1462 it->ascent += abs (it->voffset);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1463 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1464 /* 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
1465 in the line. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1466 it->descent += it->voffset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1467 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1468 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1469
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1470
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1471 /* 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
1472 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
1473 an overview of struct display_iterator. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1474
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1475 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1476 x_produce_image_glyph (it)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1477 struct it *it;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1478 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1479 struct image *img;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1480 struct face *face;
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 xassert (it->what == IT_IMAGE);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1483
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1484 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
1485 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
1486 xassert (img);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1487
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1488 /* 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
1489 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
1490 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
1491
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1492 it->ascent = it->phys_ascent = IMAGE_ASCENT (img);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1493 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
1494 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
1495
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1496 it->nglyphs = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1497
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1498 if (face->box != FACE_NO_BOX)
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 it->ascent += face->box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1501 it->descent += face->box_line_width;
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 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
1504 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
1505 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
1506 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
1507 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1508
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1509 take_vertical_position_into_account (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 if (it->glyph_row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1512 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1513 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1514 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
1515
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1516 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
1517 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
1518 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1519 glyph->type = IMAGE_GLYPH;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1520 glyph->u.img.id = img->id;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1521 glyph->u.img.face_id = it->face_id;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1522 glyph->pixel_width = it->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1523 glyph->charpos = CHARPOS (it->position);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1524 glyph->object = it->object;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1525 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
1526 glyph->right_box_line_p = it->end_of_box_run_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1527 glyph->voffset = it->voffset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1528 glyph->multibyte_p = it->multibyte_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1529 ++it->glyph_row->used[area];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1530 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1531 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1532 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1533
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 /* 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
1536 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
1537 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
1538 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
1539
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1540 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1541 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
1542 struct it *it;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1543 Lisp_Object object;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1544 int width, height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1545 double ascent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1546 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1547 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1548 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
1549
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1550 xassert (ascent >= 0 && ascent <= 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1551
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1552 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
1553 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
1554 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1555 glyph->type = STRETCH_GLYPH;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1556 glyph->u.stretch.ascent = height * ascent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1557 glyph->u.stretch.height = height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1558 glyph->u.stretch.face_id = it->face_id;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1559 glyph->pixel_width = width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1560 glyph->charpos = CHARPOS (it->position);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1561 glyph->object = object;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1562 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
1563 glyph->right_box_line_p = it->end_of_box_run_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1564 glyph->voffset = it->voffset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1565 glyph->multibyte_p = it->multibyte_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1566 ++it->glyph_row->used[area];
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1571 /* 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
1572 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
1573 `(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
1574 being recognized:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1575
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1576 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
1577 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
1578 point number.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1579
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1580 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
1581 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
1582 `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
1583
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1584 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
1585 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
1586
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1587 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
1588
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1589 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
1590 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
1591
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1592 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
1593 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
1594 the glyph property.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1595
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1596 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
1597
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1598 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
1599 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
1600 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
1601
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1602 #define NUMVAL(X) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1603 ((INTEGERP (X) || FLOATP (X)) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1604 ? XFLOATINT (X) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1605 : - 1)
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 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1609 x_produce_stretch_glyph (it)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1610 struct it *it;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1611 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1612 /* (space :width WIDTH :height HEIGHT. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1613 extern Lisp_Object QCwidth, QCheight, QCascent, Qspace;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1614 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
1615 extern Lisp_Object QCalign_to;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1616 Lisp_Object prop, plist;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1617 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
1618 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
1619 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
1620
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1621 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
1622
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1623 /* List should start with `space'. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1624 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
1625 plist = XCDR (it->object);
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 /* Compute the width of the stretch. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1628 if (prop = Fplist_get (plist, QCwidth),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1629 NUMVAL (prop) > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1630 /* 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
1631 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
1632 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
1633 NUMVAL (prop) > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1634 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1635 /* 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
1636 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
1637 property. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1638 struct it it2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1639 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
1640
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1641 it2 = *it;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1642 if (it->multibyte_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1643 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1644 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
1645 - IT_BYTEPOS (*it));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1646 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
1647 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1648 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1649 it2.c = *p, it2.len = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1650
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1651 it2.glyph_row = NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1652 it2.what = IT_CHARACTER;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1653 x_produce_glyphs (&it2);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1654 width = NUMVAL (prop) * it2.pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1655 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1656 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
1657 NUMVAL (prop) > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1658 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
1659 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1660 /* 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
1661 width = CANON_X_UNIT (it->f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1662
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1663 /* Compute height. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1664 if (prop = Fplist_get (plist, QCheight),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1665 NUMVAL (prop) > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1666 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
1667 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
1668 NUMVAL (prop) > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1669 height = FONT_HEIGHT (font) * NUMVAL (prop);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1670 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1671 height = FONT_HEIGHT (font);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1672
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1673 /* 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
1674 `: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
1675 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
1676 if (prop = Fplist_get (plist, QCascent),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1677 NUMVAL (prop) > 0 && NUMVAL (prop) <= 100)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1678 ascent = NUMVAL (prop) / 100.0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1679 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1680 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
1681
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1682 if (width <= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1683 width = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1684 if (height <= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1685 height = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1686
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1687 if (it->glyph_row)
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 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
1690 if (!STRINGP (object))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1691 object = it->w->buffer;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1692 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
1693 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1694
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1695 it->pixel_width = width;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1696 it->ascent = it->phys_ascent = height * ascent;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1697 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
1698 it->nglyphs = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1699
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1700 if (face->box != FACE_NO_BOX)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1701 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1702 it->ascent += face->box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1703 it->descent += face->box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1704
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1705 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
1706 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
1707 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
1708 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
1709 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1710
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1711 take_vertical_position_into_account (it);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1712 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1713
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1714
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1715 /* 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
1716 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
1717 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
1718
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1719 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1720 x_produce_glyphs (it)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1721 struct it *it;
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 (it->what == IT_CHARACTER)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1724 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1725 XChar2b char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1726 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1727 struct face *face;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1728 XCharStruct *pcm;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1729 struct it ci;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1730 int font_not_found_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1731 int c;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1732
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1733 /* Maybe translate single-byte characters to multibyte. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1734 it->char_to_display = it->c;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1735 if (unibyte_display_via_language_environment
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1736 && SINGLE_BYTE_CHAR_P (it->c)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1737 && (it->c >= 0240
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1738 || (it->c >= 0200
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1739 && !NILP (Vnonascii_translation_table))))
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 it->char_to_display = unibyte_char_to_multibyte (it->c);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1742 it->charset = CHAR_CHARSET (it->char_to_display);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1743 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1744
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1745 /* Get face and font to use. Encode IT->char_to_display. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1746 face = x_get_char_face_and_encoding (it->f, it->char_to_display,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1747 it->face_id, &char2b,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1748 it->multibyte_p);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1749 font = face->font;
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 /* 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
1752 font_not_found_p = font == NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1753 if (font_not_found_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1754 font = FRAME_FONT (it->f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1755
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1756 if (it->char_to_display >= ' '
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1757 && (!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
1758 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1759 /* Either unibyte or ASCII. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1760 int stretched_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1761
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1762 it->nglyphs = 1;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1763
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1764 pcm = x_per_char_metric (font, &char2b);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1765 it->ascent = font->ascent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1766 it->descent = font->descent;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1767 it->phys_ascent = pcm->ascent;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1768 it->phys_descent = pcm->descent;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1769 it->pixel_width = pcm->width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1770
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1771 /* 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
1772 `space-width' property, change its width. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1773 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
1774 if (stretched_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1775 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
1776
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1777 /* 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
1778 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
1779 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
1780 if (face->box != FACE_NO_BOX)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1781 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1782 int thick = face->box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1783
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1784 it->ascent += thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1785 it->descent += thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1786
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1787 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
1788 it->pixel_width += thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1789 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
1790 it->pixel_width += thick;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1793 /* 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
1794 (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
1795 if (face->overline_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1796 it->ascent += 2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1797
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1798 take_vertical_position_into_account (it);
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 /* 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
1801 if (it->glyph_row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1802 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1803 if (stretched_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1804 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1805 /* 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
1806 into a stretch glyph. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1807 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
1808 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
1809 it->ascent + it->descent, ascent);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1810 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1811 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1812 x_append_glyph (it);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1813
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1814 /* 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
1815 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
1816 glyph row. This is used to optimize X output code. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1817 if (pcm->lbearing < 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1818 || pcm->rbearing > pcm->width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1819 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
1820 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1821 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1822 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
1823 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1824 /* 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
1825 it->pixel_width = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1826 it->nglyphs = 0;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1827 it->ascent = it->phys_ascent = font->ascent;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1828 it->descent = it->phys_descent = font->descent;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1829
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1830 if (face->box != FACE_NO_BOX)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1831 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1832 int thick = face->box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1833 it->ascent += thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1834 it->descent += thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1835 }
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 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
1838 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1839 int tab_width = it->tab_width * CANON_X_UNIT (it->f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1840 int x = (it->current_x
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1841 - it->prompt_width
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1842 + it->continuation_lines_width);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1843 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
1844
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1845 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
1846 it->nglyphs = 1;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1847 it->ascent = it->phys_ascent = font->ascent;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1848 it->descent = it->phys_descent = font->descent;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1849
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1850 if (it->glyph_row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1851 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1852 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
1853 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
1854 it->ascent + it->descent, ascent);
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 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1857 else
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 /* 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
1860 character is the width of the character multiplied by the
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1861 width of the font. There has to be better support for
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1862 variable sizes in cmpchar_info to do anything better than
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1863 that.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1864
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1865 Note: composite characters are represented as one glyph in
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1866 the glyph matrix. There are no padding glyphs. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1867 if (it->charset == CHARSET_COMPOSITION)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1868 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1869 struct cmpchar_info *cmpcharp;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1870 int idx;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1871
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1872 idx = COMPOSITE_CHAR_ID (it->char_to_display);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1873 cmpcharp = cmpchar_table[idx];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1874 it->pixel_width = font->max_bounds.width * cmpcharp->width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1875
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1876 /* There are no padding glyphs, so there is only one glyph
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1877 to produce for the composite char. Important is that
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1878 pixel_width, ascent and descent are the values of what is
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1879 drawn by draw_glyphs. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1880 it->nglyphs = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1881
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1882 /* These settings may not be correct. We must have more
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1883 information in cmpcharp to do the correct setting. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1884 it->ascent = font->ascent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1885 it->descent = font->descent;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1886 it->phys_ascent = font->max_bounds.ascent;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1887 it->phys_descent = font->max_bounds.descent;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1888 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1889 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1890 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1891 /* If we found a font, this font should give us the right
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1892 metrics. If we didn't find a font, use the frame's
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1893 default font and calculate the width of the character
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1894 from the charset width; this is what old redisplay code
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1895 did. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1896 pcm = x_per_char_metric (font, &char2b);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1897 it->pixel_width = pcm->width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1898 if (font_not_found_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1899 it->pixel_width *= CHARSET_WIDTH (it->charset);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1900 it->nglyphs = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1901 it->ascent = font->ascent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1902 it->descent = font->descent;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1903 it->phys_ascent = pcm->ascent;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1904 it->phys_descent = pcm->descent;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1905 if (it->glyph_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1906 && (pcm->lbearing < 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1907 || pcm->rbearing > pcm->width))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1908 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
1909 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1910
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1911 if (face->box != FACE_NO_BOX)
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 int thick = face->box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1914 it->ascent += thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1915 it->descent += thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1916
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1917 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
1918 it->pixel_width += thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1919 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
1920 it->pixel_width += thick;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1923 /* 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
1924 (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
1925 if (face->overline_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1926 it->ascent += 2;
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 take_vertical_position_into_account (it);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1929
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1930 if (it->glyph_row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1931 x_append_glyph (it);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1932 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1933 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1934 else if (it->what == IT_IMAGE)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1935 x_produce_image_glyph (it);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1936 else if (it->what == IT_STRETCH)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1937 x_produce_stretch_glyph (it);
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 /* Accumulate dimensions. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1940 xassert (it->ascent >= 0 && it->descent > 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1941 if (it->area == TEXT_AREA)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1942 it->current_x += it->pixel_width;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
1943
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1944 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
1945 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
1946 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
1947 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
1948 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1949
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1950
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1951 /* 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
1952 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
1953
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1954 int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1955 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
1956 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1957 enum face_id face_id;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1958 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1959 int height = 1;
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 /* 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
1962 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
1963 if (FRAME_FACE_CACHE (f))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1964 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1965 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
1966 if (face)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1967 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
1968 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1969
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1970 return height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1971 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1972
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1973
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1974 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1975 Glyph display
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1976 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1977
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1978 /* 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
1979
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1980 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
1981 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
1982 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
1983 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
1984
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1985 struct glyph_string
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1986 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1987 /* X-origin of the string. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1988 int x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1989
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1990 /* 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
1991 int y, ybase;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1992
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1993 /* 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
1994 int width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1995
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1996 /* 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
1997 int background_width;
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 /* 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
2000 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
2001 font the string is drawn in. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2002 int height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2003
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2004 /* 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
2005 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
2006 -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
2007 int left_overhang;
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 /* 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
2010 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
2011 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
2012 int right_overhang;
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 /* 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
2015 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2016
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2017 /* 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
2018 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2019
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2020 /* X display and window for convenience. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2021 Display *display;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2022 Window window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2023
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2024 /* 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
2025 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
2026 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2027
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2028 /* The area within row. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2029 enum glyph_row_area area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2030
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2031 /* 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
2032 XChar2b *char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2033 int nchars;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2034
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2035 /* Character set of this glyph string. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2036 int charset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2037
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2038 /* 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
2039 enum draw_glyphs_face hl;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2040
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2041 /* 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
2042 struct face *face;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2043
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2044 /* 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
2045 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2046
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2047 /* Font info for this string. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2048 struct font_info *font_info;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2049
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2050 /* Non-null means this string describes (part of) a composite
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2051 character. All characters from char2b are drawn at the same
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2052 x-origin in that case. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2053 struct cmpchar_info *cmpcharp;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2054
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2055 /* Index of this glyph string's first character in the glyph
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2056 definition of cmpcharp. If this is zero, this glyph string
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2057 describes the first character of a composite character. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2058 int gidx;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2059
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2060 /* 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
2061 of the window's drawing area. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2062 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
2063
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2064 /* 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
2065 unsigned background_filled_p : 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2066
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2067 /* 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
2068 unsigned two_byte_p : 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2069
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2070 /* 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
2071 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
2072 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
2073 unsigned font_not_found_p : 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2074
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2075 /* 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
2076 stipple pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2077 unsigned stippled_p : 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2078
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2079 /* 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
2080 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
2081 string appears in as clip rect. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2082 unsigned for_overlaps_p : 1;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2083
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2084 /* 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
2085 GC gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2086
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2087 /* 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
2088 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
2089 font_not_found_p is 1. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2090 struct glyph *first_glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2091
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2092 /* Image, if any. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2093 struct image *img;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2094
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2095 struct glyph_string *next, *prev;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2096 };
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2097
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2098
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2099 #if GLYPH_DEBUG
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2100
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2101 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2102 x_dump_glyph_string (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2103 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2104 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2105 fprintf (stderr, "glyph string\n");
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2106 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
2107 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
2108 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
2109 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
2110 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
2111 s->left_overhang, s->right_overhang);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2112 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
2113 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
2114 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
2115 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
2116 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
2117 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2118
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2119 #endif /* GLYPH_DEBUG */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2120
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2121
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2122
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2123 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
2124 struct glyph_string **,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2125 struct glyph_string *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2126 struct glyph_string *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2127 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
2128 struct glyph_string **,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2129 struct glyph_string *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2130 struct glyph_string *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2131 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
2132 struct glyph_string **,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2133 struct glyph_string *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2134 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
2135 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
2136 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
2137 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
2138 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
2139 int));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2140 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
2141 XChar2b *, struct window *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2142 struct glyph_row *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2143 enum glyph_row_area, int,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2144 enum draw_glyphs_face));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2145 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
2146 enum glyph_row_area, int, int,
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2147 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
2148 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
2149 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
2150 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
2151 int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2152 static void x_draw_glyph_string_foreground P_ ((struct glyph_string *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2153 static void x_draw_glyph_string_underline P_ ((struct glyph_string *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2154 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
2155 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
2156 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
2157 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
2158 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
2159 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
2160 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
2161 int *, int *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2162 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
2163 static int x_alloc_lighter_color P_ ((struct frame *, Display *, Colormap,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2164 unsigned long *, float, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2165 static void x_setup_relief_color P_ ((struct frame *, struct relief *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2166 float, int, unsigned long));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2167 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
2168 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
2169 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
2170 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
2171 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
2172 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
2173 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
2174 int, int, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2175 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
2176 int, int, int, int, XRectangle *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2177 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
2178 int, int, int, XRectangle *));
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2179 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
2180 enum glyph_row_area));
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2181
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2182
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2183 /* 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
2184 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
2185
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2186 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2187 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
2188 struct glyph_string **head, **tail;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2189 struct glyph_string *h, *t;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2190 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2191 if (h)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2192 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2193 if (*head)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2194 (*tail)->next = h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2195 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2196 *head = h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2197 h->prev = *tail;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2198 *tail = t;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2199 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2200 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2201
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2202
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2203 /* 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
2204 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
2205 result. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2206
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2207 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2208 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
2209 struct glyph_string **head, **tail;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2210 struct glyph_string *h, *t;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2211 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2212 if (h)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2213 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2214 if (*head)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2215 (*head)->prev = t;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2216 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2217 *tail = t;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2218 t->next = *head;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2219 *head = h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2220 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2221 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2222
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2223
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2224 /* 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
2225 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
2226
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2227 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2228 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
2229 struct glyph_string **head, **tail;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2230 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2231 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2232 s->next = s->prev = NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2233 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
2234 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2235
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2236
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2237 /* 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
2238 face. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2239
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2240 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2241 x_set_cursor_gc (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2242 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2243 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2244 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
2245 && 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
2246 && s->face->foreground == FRAME_FOREGROUND_PIXEL (s->f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2247 && !s->cmpcharp)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2248 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
2249 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2250 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2251 /* 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
2252 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2253 unsigned long mask;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2254
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2255 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
2256 xgcv.foreground = s->face->background;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2257
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2258 /* 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
2259 if (xgcv.foreground == xgcv.background)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2260 xgcv.foreground = s->face->foreground;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2261 if (xgcv.foreground == xgcv.background)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2262 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
2263 if (xgcv.foreground == xgcv.background)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2264 xgcv.foreground = s->face->foreground;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2265
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2266 /* 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
2267 if (xgcv.background == s->face->background
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2268 && xgcv.foreground == s->face->foreground)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2269 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2270 xgcv.background = s->face->foreground;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2271 xgcv.foreground = s->face->background;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2272 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2273
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2274 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
2275 xgcv.font = s->font->fid;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2276 xgcv.graphics_exposures = False;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2277 mask = GCForeground | GCBackground | GCFont | GCGraphicsExposures;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2278
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2279 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
2280 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
2281 mask, &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2282 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2283 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
2284 = 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
2285
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2286 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
2287 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2288 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2289
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2290
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2291 /* 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
2292
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2293 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2294 x_set_mouse_face_gc (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2295 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2296 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2297 int face_id;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2298
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2299 /* 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
2300 face_id = FRAME_X_DISPLAY_INFO (s->f)->mouse_face_face_id;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2301 face_id = FACE_FOR_CHARSET (s->f, face_id, s->charset);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2302 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
2303 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
2304
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2305 /* 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
2306 if (s->font == s->face->font)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2307 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2308 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2309 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2310 /* 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
2311 but font FONT. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2312 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2313 unsigned long mask;
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 xgcv.background = s->face->background;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2316 xgcv.foreground = s->face->foreground;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2317 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
2318 xgcv.font = s->font->fid;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2319 xgcv.graphics_exposures = False;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2320 mask = GCForeground | GCBackground | GCFont | GCGraphicsExposures;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2321
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2322 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
2323 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
2324 mask, &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2325 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2326 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
2327 = 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
2328
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2329 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
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 xassert (s->gc != 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2333 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2334
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2335
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2336 /* Set S->gc of glyph string S 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
2337 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
2338 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
2339
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2340 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2341 x_set_mode_line_face_gc (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2342 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2343 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2344 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2345 xassert (s->gc != 0);
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2348
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2349 /* 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
2350 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
2351 pattern. */
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 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2354 x_set_glyph_string_gc (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2355 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2356 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2357 if (s->hl == DRAW_NORMAL_TEXT)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2358 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2359 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2360 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
2361 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2362 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
2363 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2364 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
2365 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
2366 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2367 else if (s->hl == DRAW_CURSOR)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2368 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2369 x_set_cursor_gc (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2370 s->stippled_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2371 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2372 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
2373 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2374 x_set_mouse_face_gc (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2375 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
2376 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2377 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
2378 || s->hl == DRAW_IMAGE_SUNKEN)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2379 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2380 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2381 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
2382 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2383 else
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 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2386 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
2387 }
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 /* GC must have been set. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2390 xassert (s->gc != 0);
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2393
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2394 /* 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
2395
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2396 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2397 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
2398 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2399 XRectangle *r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2400 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2401 if (s->row->full_width_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2402 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2403 /* 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
2404 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
2405
3a09aae52441 (x_get_glyph_string_clip_rect): Take internal border
Gerd Moellmann <gerd@gnu.org>
parents: 25068
diff changeset
2406 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
2407 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
2408
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2409 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
2410 {
25079
3a09aae52441 (x_get_glyph_string_clip_rect): Take internal border
Gerd Moellmann <gerd@gnu.org>
parents: 25068
diff changeset
2411 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
2412 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
2413 r->x -= width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2414 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2415
25083
d3b7d7d2bca8 (x_setup_relief_color): Don't try smart color allocation
Gerd Moellmann <gerd@gnu.org>
parents: 25079
diff changeset
2416 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
2417
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2418 /* 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
2419 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
2420 if (s->w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2421 r->height = s->row->visible_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2422 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2423 r->height = s->height;
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 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2426 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2427 /* 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
2428 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
2429 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
2430 r->height = s->row->visible_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2431 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2432
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2433 /* 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
2434 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
2435 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
2436 if (!s->row->full_width_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2437 && MATRIX_ROW_PARTIALLY_VISIBLE_AT_TOP_P (s->w, s->row))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2438 r->y = WINDOW_DISPLAY_TOP_LINE_HEIGHT (s->w);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2439 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2440 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
2441
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2442 /* If drawing a toolbar window, draw it over the internal border
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2443 at the top of the window. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2444 if (s->w == XWINDOW (s->f->toolbar_window))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2445 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
2446
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2447 /* 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
2448 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
2449 intentionally draws over other lines. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2450 if (s->for_overlaps_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2451 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2452 r->y = WINDOW_DISPLAY_TOP_LINE_HEIGHT (s->w);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2453 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
2454 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2455
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2456 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
2457 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2458
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2459
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2460 /* 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
2461 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
2462
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2463 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2464 x_set_glyph_string_clipping (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2465 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2466 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2467 XRectangle r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2468 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
2469 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
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 /* Compute left and right overhang of glyph string S. If S is a glyph
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2474 string for a composite character, assume overhangs don't exist. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2475
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2476 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2477 x_compute_glyph_string_overhangs (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2478 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2479 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2480 if (s->cmpcharp == NULL
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2481 && s->first_glyph->type == CHAR_GLYPH)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2482 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2483 XCharStruct cs;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2484 int direction, font_ascent, font_descent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2485 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
2486 &font_ascent, &font_descent, &cs);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2487 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
2488 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
2489 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2490 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2491
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2492
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2493 /* 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
2494 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
2495 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
2496
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2497 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2498 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
2499 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2500 int x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2501 int backward_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2502 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2503 if (backward_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2504 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2505 while (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2506 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2507 x_compute_glyph_string_overhangs (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2508 x -= s->width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2509 s->x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2510 s = s->prev;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2511 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2512 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2513 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2514 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2515 while (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2516 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2517 x_compute_glyph_string_overhangs (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2518 s->x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2519 x += s->width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2520 s = s->next;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2521 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2522 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2523 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2524
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2525
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2526 /* Set *LEFT and *RIGHT to the left and right overhang of GLYPH on
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2527 frame F. Overhangs of glyphs other than type CHAR_GLYPH or of
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2528 character glyphs for composite characters are assumed to be zero. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2529
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2530 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2531 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
2532 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2533 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2534 int *left, *right;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2535 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2536 int c;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2537
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2538 *left = *right = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2539
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2540 if (glyph->type == CHAR_GLYPH
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2541 && (c = glyph->u.ch.code,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2542 CHAR_CHARSET (c) != CHARSET_COMPOSITION))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2543 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2544 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2545 struct face *face;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2546 struct font_info *font_info;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2547 XChar2b char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2548
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2549 face = x_get_glyph_face_and_encoding (f, glyph, &char2b);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2550 font = face->font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2551 font_info = FONT_INFO_FROM_ID (f, face->font_info_id);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2552 if (font)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2553 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2554 XCharStruct *pcm = x_per_char_metric (font, &char2b);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2555
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2556 if (pcm->rbearing > pcm->width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2557 *right = pcm->rbearing - pcm->width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2558 if (pcm->lbearing < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2559 *left = -pcm->lbearing;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2560 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2561 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2562 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2565 /* 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
2566 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
2567 if no glyphs are overwritten. */
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 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2570 x_left_overwritten (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2571 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2572 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2573 int k;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2574
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2575 if (s->left_overhang)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2576 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2577 int x = 0, i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2578 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
2579 int first = s->first_glyph - glyphs;
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 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
2582 x -= glyphs[i].pixel_width;
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 k = i + 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2585 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2586 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2587 k = -1;
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 return k;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2590 }
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 /* 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
2594 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
2595 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
2596
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2597 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2598 x_left_overwriting (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 int i, k, x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2602 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
2603 int first = s->first_glyph - glyphs;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2604
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2605 k = -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2606 x = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2607 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
2608 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2609 int left, right;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2610 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
2611 if (x + right > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2612 k = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2613 x -= glyphs[i].pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2614 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2615
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2616 return k;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2617 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2618
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2619
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2620 /* 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
2621 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
2622 no such glyph is found. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2623
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2624 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2625 x_right_overwritten (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2626 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2627 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2628 int k = -1;
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 if (s->right_overhang)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2631 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2632 int x = 0, i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2633 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
2634 int first = (s->first_glyph - glyphs) + (s->cmpcharp ? 1 : s->nchars);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2635 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
2636
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2637 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
2638 x += glyphs[i].pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2639
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2640 k = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2641 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2642
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2643 return k;
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 /* 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
2648 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
2649 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
2650
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
2651 static int
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2652 x_right_overwriting (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2653 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2654 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2655 int i, k, x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2656 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
2657 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
2658 int first = (s->first_glyph - glyphs) + (s->cmpcharp ? 1 : s->nchars);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2659
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2660 k = -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2661 x = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2662 for (i = first; i < end; ++i)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2663 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2664 int left, right;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2665 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
2666 if (x - left < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2667 k = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2668 x += glyphs[i].pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2669 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2670
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2671 return k;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2672 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2673
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2674
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2675 /* 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
2676
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2677 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2678 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
2679 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2680 int x, y, w, h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2681 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2682 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2683 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
2684 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
2685 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
2686 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
2687 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2688
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2689
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2690 /* 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
2691 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
2692 background even if it wouldn't be drawn normally. This is used
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2693 when a string preceding S draws into the background of S. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2694
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2695 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2696 x_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
2697 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2698 int force_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2699 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2700 /* 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
2701 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
2702 if (!s->background_filled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2703 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2704 if (s->cmpcharp
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2705 && s->gidx > 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2706 && !s->font_not_found_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2707 && !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
2708 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2709 /* Don't draw background for glyphs of a composite
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2710 characters, except for the first one. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2711 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2712 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2713 else if (s->stippled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2714 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2715 /* Fill background with a stipple pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2716 XSetFillStyle (s->display, s->gc, FillOpaqueStippled);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2717 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
2718 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
2719 s->background_width,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2720 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
2721 XSetFillStyle (s->display, s->gc, FillSolid);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2722 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2723 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2724 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
2725 || s->font_not_found_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2726 || 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
2727 || s->cmpcharp
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2728 || force_p)
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 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
2731 s->background_width,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2732 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
2733 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2734 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2735 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2736 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2737
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2738
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2739 /* 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
2740
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2741 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2742 x_draw_glyph_string_foreground (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2743 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2744 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2745 int i, x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2746
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2747 /* 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
2748 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
2749 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
2750 && 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
2751 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
2752 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2753 x = s->x;
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 if (s->cmpcharp == NULL)
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 /* Not a composite character. Draw characters of S as
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2758 rectangles if S's font could not be loaded. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2759 if (s->font_not_found_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2760 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2761 for (i = 0; i < s->nchars; ++i)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2762 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2763 struct glyph *g = s->first_glyph + i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2764 XDrawRectangle (s->display, s->window,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2765 s->gc, x, s->y, g->pixel_width - 1,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2766 s->height - 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2767 x += g->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2768 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2769 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2770 else
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 char *char1b = (char *) s->char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2773
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2774 /* If we can use 8-bit functions, condense S->char2b. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2775 if (!s->two_byte_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2776 for (i = 0; i < s->nchars; ++i)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2777 char1b[i] = s->char2b[i].byte2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2778
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2779 /* Draw text with XDrawString if background has already been
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2780 filled. Otherwise, use XDrawImageString. (Note that
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2781 XDrawImageString is usually faster than XDrawString.)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2782 Always use XDrawImageString when drawing the cursor so
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2783 that there is no chance that characters under a box
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2784 cursor are invisible. */
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2785 if (s->for_overlaps_p
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2786 || (s->background_filled_p && s->hl != DRAW_CURSOR))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2787 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2788 /* Draw characters with 16-bit or 8-bit functions. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2789 if (s->two_byte_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2790 XDrawString16 (s->display, s->window, s->gc, x, s->ybase,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2791 s->char2b, s->nchars);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2792 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2793 XDrawString (s->display, s->window, s->gc, x, s->ybase,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2794 char1b, s->nchars);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2795 }
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
2796 else
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2797 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2798 if (s->two_byte_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2799 XDrawImageString16 (s->display, s->window, s->gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2800 x, s->ybase, s->char2b, s->nchars);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2801 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2802 XDrawImageString (s->display, s->window, s->gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2803 x, s->ybase, char1b, s->nchars);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2804 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2805 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2806 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2807 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2808 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2809 /* S is a glyph string for a composite character. S->gidx is the
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2810 index of the first character drawn in the vector
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2811 S->cmpcharp->glyph. S->gidx == 0 means we are drawing the
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2812 very first component character of a composite char. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2813
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2814 /* Draw a single rectangle for the composite character if S's
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2815 font could not be loaded. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2816 if (s->font_not_found_p && s->gidx == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2817 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
2818 s->width - 1, s->height - 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2819 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2820 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2821 XCharStruct *pcm;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2822 int relative_compose, default_ascent, i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2823 int highest = 0, lowest = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2824
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2825 /* The value of font_info my be null if we couldn't find it
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2826 in x_get_char_face_and_encoding. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2827 if (s->cmpcharp->cmp_rule == NULL && s->font_info)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2828 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2829 relative_compose = s->font_info->relative_compose;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2830 default_ascent = s->font_info->default_ascent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2831 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2832 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2833 relative_compose = default_ascent = 0;
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 if ((s->cmpcharp->cmp_rule || relative_compose)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2836 && s->gidx == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2837 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2838 /* This is the first character. Initialize variables.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2839 Highest is the highest position of glyphs ever
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2840 written, lowest the lowest position. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2841 int x_offset = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2842 int first_ch = s->first_glyph->u.ch.code;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2843
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2844 if (default_ascent
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2845 && CHAR_TABLE_P (Vuse_default_ascent)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2846 && !NILP (Faref (Vuse_default_ascent, first_ch)))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2847 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2848 highest = default_ascent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2849 lowest = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2850 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2851 else
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 pcm = PER_CHAR_METRIC (s->font, s->char2b);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2854 highest = pcm->ascent + 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2855 lowest = - pcm->descent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2856 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2857
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2858 if (s->cmpcharp->cmp_rule)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2859 x_offset = (s->cmpcharp->col_offset[0]
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2860 * FONT_WIDTH (s->f->output_data.x->font));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2861
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2862 /* Draw the first character at the normal position. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2863 XDrawString16 (s->display, s->window, s->gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2864 x + x_offset,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2865 s->ybase, s->char2b, 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2866 i = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2867 ++s->gidx;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2868 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2869 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2870 i = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2871
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2872 for (; i < s->nchars; i++, ++s->gidx)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2873 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2874 int x_offset = 0, y_offset = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2875
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2876 if (relative_compose)
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 pcm = PER_CHAR_METRIC (s->font, s->char2b + i);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2879 if (NILP (Vignore_relative_composition)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2880 || NILP (Faref (Vignore_relative_composition,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2881 make_number (s->cmpcharp->glyph[s->gidx]))))
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
2882 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2883 if (- pcm->descent >= relative_compose)
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 /* Draw above the current glyphs. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2886 y_offset = highest + pcm->descent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2887 highest += pcm->ascent + pcm->descent;
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 else if (pcm->ascent <= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2890 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2891 /* Draw beneath the current glyphs. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2892 y_offset = lowest - pcm->ascent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2893 lowest -= pcm->ascent + pcm->descent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2894 }
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
2895 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2896 else
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
2897 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2898 /* Draw the glyph at normal position. If
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2899 it sticks out of HIGHEST or LOWEST,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2900 update them appropriately. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2901 if (pcm->ascent > highest)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2902 highest = pcm->ascent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2903 else if (- pcm->descent < lowest)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2904 lowest = - pcm->descent;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
2905 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2906 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2907 else if (s->cmpcharp->cmp_rule)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2908 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2909 int gref = (s->cmpcharp->cmp_rule[s->gidx] - 0xA0) / 9;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2910 int nref = (s->cmpcharp->cmp_rule[s->gidx] - 0xA0) % 9;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2911 int bottom, top;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2912
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2913 /* Re-encode GREF and NREF so that they specify
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2914 only Y-axis information:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2915 0:top, 1:base, 2:bottom, 3:center */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2916 gref = gref / 3 + (gref == 4) * 2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2917 nref = nref / 3 + (nref == 4) * 2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2918
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2919 pcm = PER_CHAR_METRIC (s->font, s->char2b + i);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2920 bottom = ((gref == 0 ? highest : gref == 1 ? 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2921 : gref == 2 ? lowest
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2922 : (highest + lowest) / 2)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2923 - (nref == 0 ? pcm->ascent + pcm->descent
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2924 : nref == 1 ? pcm->descent : nref == 2 ? 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2925 : (pcm->ascent + pcm->descent) / 2));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2926 top = bottom + (pcm->ascent + pcm->descent);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2927 if (top > highest)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2928 highest = top;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2929 if (bottom < lowest)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2930 lowest = bottom;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2931 y_offset = bottom + pcm->descent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2932 x_offset = (s->cmpcharp->col_offset[s->gidx]
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2933 * FONT_WIDTH (FRAME_FONT (s->f)));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2934 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2935
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2936 XDrawString16 (s->display, s->window, s->gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2937 x + x_offset, s->ybase - y_offset,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2938 s->char2b + i, 1);
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 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2941 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2942 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2943
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 /* 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
2946 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
2947 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
2948 color allocated. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2949
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2950 int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2951 x_alloc_nearest_color (display, screen, cmap, color)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2952 Display *display;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2953 Screen *screen;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2954 Colormap cmap;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2955 XColor *color;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2956 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2957 int rc = XAllocColor (display, cmap, color);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2958 if (rc == 0)
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 /* 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
2961 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
2962 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
2963 color matching with StaticColor visuals. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2964 int nearest, i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2965 unsigned long nearest_delta = ~0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2966 int ncells = XDisplayCells (display, XScreenNumberOfScreen (screen));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2967 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
2968
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2969 for (i = 0; i < ncells; ++i)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2970 cells[i].pixel = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2971 XQueryColors (display, cmap, cells, ncells);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2972
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2973 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
2974 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2975 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
2976 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
2977 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
2978 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
2979
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2980 if (delta < nearest_delta)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2981 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2982 nearest = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2983 nearest_delta = delta;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2984 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2985 }
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 color->red = cells[nearest].red;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2988 color->green = cells[nearest].green;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2989 color->blue = cells[nearest].blue;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2990 rc = XAllocColor (display, cmap, color);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2991 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2992
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2993 return rc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2994 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2995
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2996
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2997 /* 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
2998 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
2999 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
3000 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
3001 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
3002 Value is non-zero if successful. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3003
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3004 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3005 x_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
3006 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3007 Display *display;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3008 Colormap cmap;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3009 unsigned long *pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3010 float factor;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3011 int delta;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3012 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3013 XColor color, new;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3014 int success_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3015
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3016 /* Get RGB color values. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3017 color.pixel = *pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3018 XQueryColor (display, cmap, &color);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3019
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3020 /* 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
3021 xassert (factor >= 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3022 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
3023 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
3024 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
3025
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3026 /* Try to allocate the color. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3027 success_p = x_alloc_nearest_color (display, FRAME_X_SCREEN (f), cmap, &new);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3028 if (success_p)
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 if (new.pixel == *pixel)
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 /* 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
3033 delta to the RGB values. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3034 int class = FRAME_X_DISPLAY_INFO (f)->visual->class;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3035
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3036 /* If display has an immutable color map, freeing colors is
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3037 not necessary and some servers don't allow it. So don't
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3038 do it. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3039 if (class != StaticColor
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3040 && class != StaticGray
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3041 && class != TrueColor)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3042 XFreeColors (display, cmap, &new.pixel, 1, 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3043
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3044 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
3045 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
3046 new.blue = min (0xffff, delta + color.blue);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3047 success_p = x_alloc_nearest_color (display, FRAME_X_SCREEN (f),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3048 cmap, &new);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3049 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3050 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3051 success_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3052 *pixel = new.pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3053 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3054
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3055 return success_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3056 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3057
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3058
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3059 /* 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
3060 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
3061 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
3062 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
3063 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
3064 be allocated, use DEFAULT_PIXEL, instead. */
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 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3067 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
3068 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3069 struct relief *relief;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3070 float factor;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3071 int delta;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3072 unsigned long default_pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3073 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3074 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3075 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
3076 unsigned long mask = GCForeground | GCLineWidth | GCGraphicsExposures;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3077 unsigned long pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3078 unsigned long background = di->relief_background;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3079 Colormap cmap = DefaultColormapOfScreen (FRAME_X_SCREEN (f));
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
3080 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
3081 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
3082
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3083 xgcv.graphics_exposures = False;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3084 xgcv.line_width = 1;
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 /* 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
3087 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
3088 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
3089 if (relief->gc
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3090 && relief->allocated_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3091 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3092 /* If display has an immutable color map, freeing colors is not
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3093 necessary and some servers don't allow it. So don't do it. */
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
3094 int class = dpyinfo->visual->class;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3095 if (class != StaticColor
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3096 && class != StaticGray
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3097 && class != TrueColor)
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
3098 XFreeColors (dpy, cmap, &relief->pixel, 1, 0);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3099 relief->allocated_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3100 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3101
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3102 /* Allocate new color. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3103 xgcv.foreground = default_pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3104 pixel = background;
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
3105 if (dpyinfo->n_planes != 1
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
3106 && 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
3107 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3108 relief->allocated_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3109 xgcv.foreground = relief->pixel = pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3110 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3111
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3112 if (relief->gc == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3113 {
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
3114 xgcv.stipple = dpyinfo->gray;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3115 mask |= GCStipple;
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
3116 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
3117 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3118 else
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
3119 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
3120 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3121
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3122
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3123 /* 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
3124
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3125 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3126 x_setup_relief_colors (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3127 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3128 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3129 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
3130 unsigned long color;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3131
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3132 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
3133 color = s->face->box_color;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3134 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3135 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3136 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3137
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3138 /* 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
3139 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
3140 color = xgcv.background;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3141 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3142
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3143 if (di->white_relief.gc == 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3144 || color != di->relief_background)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3145 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3146 di->relief_background = color;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3147 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
3148 WHITE_PIX_DEFAULT (s->f));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3149 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
3150 BLACK_PIX_DEFAULT (s->f));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3151 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3152 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3153
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3154
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3155 /* 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
3156 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
3157 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
3158 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
3159 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
3160 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
3161 when drawing. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3162
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3163 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3164 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
3165 raised_p, left_p, right_p, clip_rect)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
3166 struct frame *f;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3167 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
3168 XRectangle *clip_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3169 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3170 int i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3171 GC gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3172
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3173 if (raised_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3174 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
3175 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3176 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
3177 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
3178
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3179 /* Top. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3180 for (i = 0; i < width; ++i)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3181 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
3182 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
3183 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
3184
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3185 /* Left. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3186 if (left_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3187 for (i = 0; i < width; ++i)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3188 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
3189 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
3190
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3191 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
3192 if (raised_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3193 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
3194 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3195 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
3196 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
3197
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3198 /* Bottom. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3199 for (i = 0; i < width; ++i)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3200 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
3201 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
3202 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
3203
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3204 /* Right. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3205 if (right_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3206 for (i = 0; i < width; ++i)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3207 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
3208 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
3209
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3210 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
3211 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3212
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3213
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3214 /* 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
3215 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
3216 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
3217 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
3218 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
3219 rectangle to use when drawing. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3220
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3221 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3222 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
3223 left_p, right_p, clip_rect)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3224 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3225 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
3226 XRectangle *clip_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3227 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3228 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3229
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3230 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
3231 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
3232 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
3233
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3234 /* Top. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3235 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
3236 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
3237
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3238 /* Left. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3239 if (left_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3240 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
3241 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
3242
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3243 /* Bottom. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3244 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
3245 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
3246
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3247 /* Right. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3248 if (right_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3249 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
3250 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
3251
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3252 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
3253 XSetClipMask (s->display, s->gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3254 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3255
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3256
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3257 /* 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
3258
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3259 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3260 x_draw_glyph_string_box (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3261 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3262 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3263 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
3264 int left_p, right_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3265 struct glyph *last_glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3266 XRectangle clip_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3267
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3268 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
3269 if (s->row->full_width_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3270 && !s->w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3271 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3272 last_x += FRAME_X_FLAGS_AREA_WIDTH (s->f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3273 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
3274 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
3275 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3276
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3277 /* The glyph that may have a right box line. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3278 last_glyph = (s->cmpcharp || s->img
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3279 ? s->first_glyph
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3280 : s->first_glyph + s->nchars - 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3281
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3282 width = s->face->box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3283 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
3284 left_x = s->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3285 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
3286 ? last_x - 1
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3287 : min (last_x, s->x + s->width) - 1));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3288 top_y = s->y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3289 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
3290
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3291 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
3292 || (s->hl == DRAW_MOUSE_FACE
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3293 && (s->prev == NULL
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3294 || s->prev->hl != s->hl)));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3295 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
3296 || (s->hl == DRAW_MOUSE_FACE
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3297 && (s->next == NULL
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3298 || s->next->hl != s->hl)));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3299
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3300 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
3301
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3302 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
3303 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
3304 left_p, right_p, &clip_rect);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3305 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3306 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3307 x_setup_relief_colors (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3308 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
3309 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
3310 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3311 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3312
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3313
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3314 /* 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
3315
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3316 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3317 x_draw_image_foreground (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3318 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3319 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3320 int x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3321 int y = s->ybase - IMAGE_ASCENT (s->img);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3322
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3323 /* 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
3324 right of that line. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3325 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
3326 && 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
3327 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
3328 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3329 x = s->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3330
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3331 /* If 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
3332 by that margin. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3333 if (s->img->margin)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3334 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3335 x += s->img->margin;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3336 y += s->img->margin;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3337 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3338
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3339 if (s->img->pixmap)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3340 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3341 if (s->img->mask)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3342 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3343 /* 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
3344 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
3345 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
3346 (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
3347 manually. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3348 unsigned long mask = (GCClipMask | GCClipXOrigin | GCClipYOrigin
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3349 | GCFunction);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3350 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3351 XRectangle clip_rect, image_rect, r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3352
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3353 xgcv.clip_mask = s->img->mask;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3354 xgcv.clip_x_origin = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3355 xgcv.clip_y_origin = y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3356 xgcv.function = GXcopy;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3357 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
3358
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3359 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
3360 image_rect.x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3361 image_rect.y = y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3362 image_rect.width = s->img->width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3363 image_rect.height = s->img->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3364 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
3365 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
3366 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
3367 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3368 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3369 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3370 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
3371 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
3372
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3373 /* 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
3374 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
3375 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
3376 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
3377 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
3378 nothing here for mouse-face. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3379 if (s->hl == DRAW_CURSOR)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3380 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
3381 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
3382 }
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 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3385 /* 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
3386 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
3387 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
3388 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3389
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3390
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3391 /* 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
3392
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3393 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3394 x_draw_image_relief (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3395 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3396 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3397 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
3398 XRectangle r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3399 int x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3400 int y = s->ybase - IMAGE_ASCENT (s->img);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3401
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3402 /* 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
3403 right of that line. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3404 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
3405 && 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
3406 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
3407 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3408 x = s->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3409
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3410 /* 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
3411 by that margin. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3412 if (s->img->margin)
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 x += s->img->margin;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3415 y += s->img->margin;
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 if (s->hl == DRAW_IMAGE_SUNKEN
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3419 || s->hl == DRAW_IMAGE_RAISED)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3420 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3421 thick = toolbar_button_relief > 0 ? toolbar_button_relief : 3;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3422 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
3423 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3424 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3425 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3426 thick = abs (s->img->relief);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3427 raised_p = s->img->relief > 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3428 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3429
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3430 x0 = x - thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3431 y0 = y - thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3432 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
3433 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
3434
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3435 x_setup_relief_colors (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3436 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
3437 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
3438 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3439
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3440
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3441 /* 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
3442
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3443 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3444 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
3445 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3446 Pixmap pixmap;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3447 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3448 int x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3449 int y = s->ybase - s->y - IMAGE_ASCENT (s->img);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3450
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3451 /* 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
3452 right of that line. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3453 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
3454 && 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
3455 x = s->face->box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3456 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3457 x = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3458
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3459 /* 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
3460 by that margin. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3461 if (s->img->margin)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3462 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3463 x += s->img->margin;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3464 y += s->img->margin;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3465 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3466
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3467 if (s->img->pixmap)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3468 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3469 if (s->img->mask)
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 /* 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
3472 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
3473 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
3474 (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
3475 manually. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3476 unsigned long mask = (GCClipMask | GCClipXOrigin | GCClipYOrigin
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3477 | GCFunction);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3478 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3479
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3480 xgcv.clip_mask = s->img->mask;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3481 xgcv.clip_x_origin = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3482 xgcv.clip_y_origin = y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3483 xgcv.function = GXcopy;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3484 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
3485
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3486 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
3487 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
3488 XSetClipMask (s->display, s->gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3489 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3490 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3491 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3492 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
3493 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
3494
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3495 /* 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
3496 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
3497 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
3498 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
3499 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
3500 nothing here for mouse-face. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3501 if (s->hl == DRAW_CURSOR)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3502 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
3503 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
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 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3507 /* 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
3508 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
3509 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
3510 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3511
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3512
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3513 /* 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
3514 give the rectangle to draw. */
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_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
3518 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3519 int x, y, w, h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3520 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3521 if (s->stippled_p)
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 /* Fill background with a stipple pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3524 XSetFillStyle (s->display, s->gc, FillOpaqueStippled);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3525 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
3526 XSetFillStyle (s->display, s->gc, FillSolid);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3527 }
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 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
3530 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3533 /* Draw image glyph string S.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3534
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3535 s->y
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3536 s->x +-------------------------
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3537 | s->face->box
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3538 |
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3539 | +-------------------------
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3540 | | s->img->margin
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3541 | |
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3542 | | +-------------------
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3543 | | | the image
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3544
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3545 */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3546
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3547 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3548 x_draw_image_glyph_string (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3549 struct glyph_string *s;
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 int x, y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3552 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
3553 int margin = s->img->margin;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3554 int height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3555 Pixmap pixmap = None;
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 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
3558
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3559 /* 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
3560 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
3561 flickering. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3562 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
3563 if (height > s->img->height
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3564 || margin
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3565 || s->img->mask
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3566 || s->img->pixmap == 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3567 || s->width != s->background_width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3568 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3569 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
3570 x = s->x + box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3571 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3572 x = s->x;
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 y = s->y + box_line_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3575
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3576 if (s->img->mask)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3577 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3578 /* 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
3579 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
3580 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
3581 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
3582 int depth = DefaultDepthOfScreen (screen);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3583
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3584 /* 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
3585 pixmap = XCreatePixmap (s->display, s->window,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3586 s->background_width,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3587 s->height, depth);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3588
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3589 /* 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
3590 pixmap. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3591 XSetClipMask (s->display, s->gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3592
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3593 /* 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
3594 if (s->stippled_p)
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 /* Fill background with a stipple pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3597 XSetFillStyle (s->display, s->gc, FillOpaqueStippled);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3598 XFillRectangle (s->display, pixmap, s->gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3599 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
3600 XSetFillStyle (s->display, s->gc, FillSolid);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3601 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3602 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3603 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3604 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3605 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
3606 &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3607 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
3608 XFillRectangle (s->display, pixmap, s->gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3609 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
3610 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
3611 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3612 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3613 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3614 /* 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
3615 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
3616 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
3617 image. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3618 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
3619
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3620 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3621 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3622
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3623 /* Draw the foreground. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3624 if (pixmap != None)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3625 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3626 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
3627 x_set_glyph_string_clipping (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3628 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
3629 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
3630 XFreePixmap (s->display, pixmap);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3631 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3632 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3633 x_draw_image_foreground (s);
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 /* 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
3636 if (s->img->relief
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3637 || s->hl == DRAW_IMAGE_RAISED
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3638 || s->hl == DRAW_IMAGE_SUNKEN)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3639 x_draw_image_relief (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3640 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3641
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3642
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3643 /* Draw stretch glyph string S. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3644
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3645 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3646 x_draw_stretch_glyph_string (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3647 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3648 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3649 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
3650 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
3651
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3652 if (s->hl == DRAW_CURSOR
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3653 && !x_stretch_cursor_p)
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 `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
3656 as wide as the stretch glyph. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3657 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
3658
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3659 /* Draw cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3660 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
3661
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3662 /* 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
3663 if (width < s->background_width)
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 GC gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3666 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
3667 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
3668 XRectangle r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3669
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3670 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
3671 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
3672
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3673 if (s->face->stipple)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3674 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3675 /* Fill background with a stipple pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3676 XSetFillStyle (s->display, gc, FillOpaqueStippled);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3677 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
3678 XSetFillStyle (s->display, gc, FillSolid);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3679 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3680 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3681 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3682 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3683 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
3684 XSetForeground (s->display, gc, xgcv.background);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3685 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
3686 XSetForeground (s->display, gc, xgcv.foreground);
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 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3689 }
313
ac18f34e3e33 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 286
diff changeset
3690 else
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3691 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
3692 s->height);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3693
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3694 s->background_filled_p = 1;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3697
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3698 /* Draw glyph string S. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3699
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3700 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3701 x_draw_glyph_string (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3702 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3703 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3704 /* 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
3705 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
3706 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
3707 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
3708 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3709 xassert (s->next->img == NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3710 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
3711 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
3712 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
3713 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3714
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3715 /* 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
3716 x_set_glyph_string_gc (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3717 x_set_glyph_string_clipping (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3718
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3719 switch (s->first_glyph->type)
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 case IMAGE_GLYPH:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3722 x_draw_image_glyph_string (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3723 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3724
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3725 case STRETCH_GLYPH:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3726 x_draw_stretch_glyph_string (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3727 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3728
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3729 case CHAR_GLYPH:
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3730 if (s->for_overlaps_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3731 s->background_filled_p = 1;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3732 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3733 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
3734 x_draw_glyph_string_foreground (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3735 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3736
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3737 default:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3738 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3739 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3740
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3741 if (!s->for_overlaps_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3742 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3743 /* Draw underline. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3744 if (s->face->underline_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3745 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3746 unsigned long dy, h;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3747
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3748 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
3749 h = 1;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3750 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
3751 dy = s->height - h;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3752
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3753 if (s->face->underline_defaulted_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3754 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
3755 s->width, h);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3756 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3757 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3758 XGCValues xgcv;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3759 XGetGCValues (s->display, s->gc, GCForeground, &xgcv);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3760 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
3761 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
3762 s->width, h);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3763 XSetForeground (s->display, s->gc, xgcv.foreground);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3764 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3765 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3766
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3767 /* Draw overline. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3768 if (s->face->overline_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3769 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3770 unsigned long dy = 0, h = 1;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3771
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3772 if (s->face->overline_color_defaulted_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3773 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
3774 s->width, h);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3775 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3776 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3777 XGCValues xgcv;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3778 XGetGCValues (s->display, s->gc, GCForeground, &xgcv);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3779 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
3780 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
3781 s->width, h);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3782 XSetForeground (s->display, s->gc, xgcv.foreground);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3783 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3784 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3785
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3786 /* Draw strike-through. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3787 if (s->face->strike_through_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3788 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3789 unsigned long h = 1;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3790 unsigned long dy = (s->height - h) / 2;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3791
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3792 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
3793 XFillRectangle (s->display, s->window, s->gc, s->x, s->y + dy,
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3794 s->width, h);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3795 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3796 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3797 XGCValues xgcv;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3798 XGetGCValues (s->display, s->gc, GCForeground, &xgcv);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3799 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
3800 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
3801 s->width, h);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3802 XSetForeground (s->display, s->gc, xgcv.foreground);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3803 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3804 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3805
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3806 /* Draw relief. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3807 if (s->face->box != FACE_NO_BOX)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3808 x_draw_glyph_string_box (s);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3809 }
24991
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 /* Reset clipping. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3812 XSetClipMask (s->display, s->gc, None);
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3815
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3816 /* A work-list entry used during the construction of glyph_string
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3817 structures for a composite character. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3818
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3819 struct work
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3820 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3821 /* Pointer to composite char info defining has the composite
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3822 character is drawn. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3823 struct cmpchar_info *cmpcharp;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3824
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3825 /* Start index in compcharp->glyph[]. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3826 int gidx;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3827
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3828 /* Next in stack. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3829 struct work *next;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3830 };
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3831
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3832
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3833 static void x_fill_composite_glyph_string P_ ((struct glyph_string *,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3834 int, struct work **,
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3835 struct work **, int));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3836
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3837
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3838 /* Load glyph string S with information from the top of *STACK for a
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3839 composite character. FACE_ID is the id of the face in which S is
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3840 drawn. *NEW is a pointer to a struct work not on the stack, that
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3841 can be used if this function needs to push a new structure on the
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3842 stack. If it uses it, *NEW is set to null. OVERLAPS_P non-zero
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3843 means S should draw the foreground only, and use its lines physical
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3844 height for clipping. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3845
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3846 static void
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3847 x_fill_composite_glyph_string (s, face_id, stack, new, overlaps_p)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3848 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3849 int face_id;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3850 struct work **stack, **new;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3851 int overlaps_p;
24991
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 int i, c;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3854 struct work *work;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3855
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3856 xassert (s && *new && *stack);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3857
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3858 s->for_overlaps_p = 1;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3859
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3860 /* Pop the work stack. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3861 work = *stack;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3862 *stack = work->next;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3863
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3864 /* For all glyphs of cmpcharp->glyph, starting at the offset
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3865 work->offset, until we reach the end of the definition or
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3866 encounter another composite char, get the font and face to use,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3867 and add it to S. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3868 for (i = work->gidx; i < work->cmpcharp->glyph_len; ++i)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3869 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3870 c = FAST_GLYPH_CHAR (work->cmpcharp->glyph[i]);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3871 if (CHAR_CHARSET (c) == CHARSET_COMPOSITION)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3872 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3873 s->face = x_get_char_face_and_encoding (s->f, c, face_id,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3874 s->char2b + s->nchars, 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3875 s->font = s->face->font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3876 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
3877 ++s->nchars;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3880 /* If we find another composite char in the glyph definition of
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3881 work->cmpcharp, put back the rest of the glyphs on the work
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3882 stack, and make a new entry for the composite char. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3883 if (i < work->cmpcharp->glyph_len)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3884 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3885 /* Push back an unprocessed rest of this glyph spec. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3886 if (i < work->cmpcharp->glyph_len - 1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3887 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3888 work->gidx = i + 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3889 work->next = *stack;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3890 *stack = work;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3891 work = *new;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3892 *new = NULL;
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 /* Make an entry for the composite char on the work stack. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3896 work->cmpcharp = cmpchar_table[COMPOSITE_CHAR_ID (c)];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3897 work->gidx = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3898 work->next = *stack;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3899 *stack = work;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3900 }
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 /* The width of this glyph string equals the width of the first
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3903 glyph. All characters are drawn at the same x-position. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3904 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
3905
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3906 /* 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
3907 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
3908 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
3909 characters of the glyph string. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3910 if (s->font == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3911 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3912 s->font_not_found_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3913 s->font = FRAME_FONT (s->f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3914 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3915
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3916 /* 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
3917 s->ybase += s->first_glyph->voffset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3918
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3919 xassert (s->face && s->face->gc);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3920
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3921 /* 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
3922 s->two_byte_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3923 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3924
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3925
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3926 /* Load glyph string S with a sequence of non-composite characters.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3927 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
3928 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
3929 OVERLAPS_P non-zero means S should draw the foreground only, and
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3930 use its lines physical height for clipping.
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3931
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3932 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
3933
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3934 static int
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3935 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
3936 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3937 int face_id;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3938 int start, end, overlaps_p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3939 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3940 struct glyph *glyph, *last;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3941 int voffset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3942
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3943 xassert (s->charset != CHARSET_COMPOSITION);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3944 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
3945 xassert (s->nchars == 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3946 xassert (start >= 0 && end > start);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3947
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3948 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
3949 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
3950 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
3951 voffset = glyph->voffset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3952
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3953 while (glyph < last
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3954 && glyph->type == CHAR_GLYPH
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3955 && glyph->voffset == voffset
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3956 /* Same face id implies same charset, nowadays. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3957 && glyph->u.ch.face_id == face_id)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3958 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3959 s->face = x_get_glyph_face_and_encoding (s->f, glyph,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3960 s->char2b + s->nchars);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3961 if (s->char2b[s->nchars].byte2 != 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3962 s->two_byte_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3963
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3964 ++s->nchars;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3965 xassert (s->nchars <= end - start);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3966 s->width += glyph->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3967 ++glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3968 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3969
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3970 s->font = s->face->font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3971 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
3972
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3973 /* 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
3974 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
3975 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
3976 characters of the glyph string. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3977 if (s->font == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3978 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3979 s->font_not_found_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3980 s->font = FRAME_FONT (s->f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3981 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3982
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3983 /* 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
3984 s->ybase += voffset;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
3985
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3986 xassert (s->face && s->face->gc);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3987 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
3988 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3989
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3990
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3991 /* Fill 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
3992
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3993 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3994 x_fill_image_glyph_string (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3995 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3996 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3997 xassert (s->first_glyph->type == IMAGE_GLYPH);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3998 s->img = IMAGE_FROM_ID (s->f, s->first_glyph->u.img.id);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3999 xassert (s->img);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4000 s->face = FACE_FROM_ID (s->f, s->first_glyph->u.img.face_id);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4001 s->font = s->face->font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4002 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
4003
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4004 /* 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
4005 s->ybase += s->first_glyph->voffset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4006 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4009 /* Fill glyph string S from stretch glyph S->first_glyph. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4010
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4011 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4012 x_fill_stretch_glyph_string (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4013 struct glyph_string *s;
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 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
4016 s->face = FACE_FROM_ID (s->f, s->first_glyph->u.stretch.face_id);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4017 s->font = s->face->font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4018 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
4019
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4020 /* 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
4021 s->ybase += s->first_glyph->voffset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4022 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4023
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 /* 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
4026 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
4027 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
4028 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
4029 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
4030 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
4031 face-override for drawing S. */
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 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4034 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
4035 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4036 XChar2b *char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4037 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4038 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4039 enum glyph_row_area area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4040 int start;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4041 enum draw_glyphs_face hl;
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 bzero (s, sizeof *s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4044 s->w = w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4045 s->f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4046 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
4047 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
4048 s->char2b = char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4049 s->hl = hl;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4050 s->row = row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4051 s->area = area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4052 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
4053 s->height = row->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4054 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
4055
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4056 /* Display the internal border below the toolbar window. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4057 if (s->w == XWINDOW (s->f->toolbar_window))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4058 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
4059
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4060 s->ybase = s->y + row->ascent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4061 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4062
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4063
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4064 /* 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
4065 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
4066 in the drawing area. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4067
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4068 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4069 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
4070 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4071 int start;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4072 int last_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4073 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4074 /* 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
4075 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
4076 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
4077
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4078 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
4079 && s->hl == DRAW_NORMAL_TEXT
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4080 && ((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
4081 || s->face->background != default_face->background
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4082 || s->face->stipple != default_face->stipple))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4083 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
4084
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4085 /* 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
4086 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
4087 area. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4088 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
4089 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
4090 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4091 s->background_width = s->width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4092 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4093
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4094
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4095 /* 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
4096 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
4097 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
4098 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
4099 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
4100 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
4101 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
4102
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4103 #define BUILD_STRETCH_GLYPH_STRING(W, ROW, AREA, START, END, HEAD, TAIL, \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4104 HL, X, LAST_X) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4105 do \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4106 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4107 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
4108 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
4109 x_fill_stretch_glyph_string (s); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4110 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
4111 ++START; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4112 s->x = (X); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4113 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4114 while (0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4115
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4116
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4117 /* 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
4118 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
4119 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
4120 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
4121 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
4122 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
4123 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
4124
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4125 #define BUILD_IMAGE_GLYPH_STRING(W, ROW, AREA, START, END, HEAD, TAIL, \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4126 HL, X, LAST_X) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4127 do \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4128 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4129 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
4130 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
4131 x_fill_image_glyph_string (s); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4132 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
4133 ++START; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4134 s->x = (X); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4135 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4136 while (0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4137
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4138
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4139 /* 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
4140 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
4141 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
4142 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
4143 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
4144 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
4145 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
4146 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
4147
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4148 #define BUILD_CHAR_GLYPH_STRINGS(W, ROW, AREA, START, END, HEAD, TAIL, HL, \
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4149 X, LAST_X, OVERLAPS_P) \
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4150 do \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4151 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4152 int c, charset, face_id; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4153 XChar2b *char2b; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4154 \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4155 c = (ROW)->glyphs[AREA][START].u.ch.code; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4156 charset = CHAR_CHARSET (c); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4157 face_id = (ROW)->glyphs[AREA][START].u.ch.face_id; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4158 \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4159 if (charset == CHARSET_COMPOSITION) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4160 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4161 struct work *stack, *work, *new = NULL; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4162 int n = 0; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4163 struct glyph_string *first_s = NULL; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4164 \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4165 /* Push an initial entry for character c on the stack. */ \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4166 stack = NULL; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4167 work = (struct work *) alloca (sizeof *work); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4168 work->cmpcharp = cmpchar_table[COMPOSITE_CHAR_ID (c)]; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4169 work->gidx = 0; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4170 work->next = stack; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4171 stack = work; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4172 \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4173 /* While the stack is not empty, append glyph_strings \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4174 to head/tail for glyphs to draw. */ \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4175 while (stack) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4176 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4177 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
4178 char2b = (XChar2b *) alloca (stack->cmpcharp->glyph_len \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4179 * sizeof (XChar2b)); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4180 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
4181 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
4182 s->cmpcharp = stack->cmpcharp; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4183 s->gidx = stack->gidx; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4184 s->charset = charset; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4185 s->x = (X); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4186 \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4187 if (n == 0) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4188 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4189 /* Don't draw the background except for the \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4190 first glyph string. */ \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4191 s->background_filled_p = n > 0; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4192 first_s = s; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4193 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4194 ++n; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4195 \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4196 if (new == NULL) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4197 new = (struct work *) alloca (sizeof *new); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4198 x_fill_composite_glyph_string (s, face_id, &stack, \
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4199 &new, OVERLAPS_P); \
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4200 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4201 \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4202 ++START; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4203 s = first_s; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4204 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4205 else \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4206 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4207 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
4208 char2b = (XChar2b *) alloca ((END - START) * sizeof *char2b); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4209 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
4210 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
4211 s->charset = charset; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4212 s->x = (X); \
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4213 START = x_fill_glyph_string (s, face_id, START, END, \
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4214 OVERLAPS_P); \
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4215 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4216 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4217 while (0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4218
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4219
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4220 /* 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
4221 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
4222 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
4223 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
4224 x-positions of the drawing area.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4225
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4226 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
4227 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
4228 asynchronously). */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4229
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4230 #define BUILD_GLYPH_STRINGS(W, ROW, AREA, START, END, HEAD, TAIL, HL, \
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4231 X, LAST_X, OVERLAPS_P) \
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4232 do \
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 HEAD = TAIL = NULL; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4235 while (START < END) \
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 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
4238 switch (first_glyph->type) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4239 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4240 case CHAR_GLYPH: \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4241 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
4242 TAIL, HL, X, LAST_X, \
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4243 OVERLAPS_P); \
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4244 break; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4245 \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4246 case STRETCH_GLYPH: \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4247 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
4248 HEAD, TAIL, HL, X, LAST_X); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4249 break; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4250 \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4251 case IMAGE_GLYPH: \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4252 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
4253 TAIL, HL, X, LAST_X); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4254 break; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4255 \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4256 default: \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4257 abort (); \
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 \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4260 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
4261 (X) += s->width; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4262 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4263 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4264 while (0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4265
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4266
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4267 /* 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
4268 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
4269 face-override with the following meaning:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4270
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4271 DRAW_NORMAL_TEXT draw normally
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4272 DRAW_CURSOR draw in cursor face
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4273 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
4274 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
4275 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
4276 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
4277
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4278 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
4279 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
4280 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
4281 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
4282 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
4283
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4284 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
4285 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
4286
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4287 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
4288
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4289 static int
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4290 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
4291 overlaps_p)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4292 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4293 int x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4294 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4295 enum glyph_row_area area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4296 int start, end;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4297 enum draw_glyphs_face hl;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4298 int *real_start, *real_end;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4299 int overlaps_p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4300 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4301 struct glyph_string *head, *tail;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4302 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4303 int last_x, area_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4304 int x_reached;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4305 int i, j;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4306
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4307 /* 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
4308 start = max (0, start);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4309 end = min (end, row->used[area]);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4310 if (real_start)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4311 *real_start = start;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4312 if (real_end)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4313 *real_end = end;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4314
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4315 /* 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
4316 end of the drawing area. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4317 if (row->full_width_p)
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 /* 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
4320 or flag areas. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4321 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4322 int width = FRAME_FLAGS_AREA_WIDTH (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4323 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
4324
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4325 x += window_left_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4326 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
4327 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
4328
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4329 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
4330 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4331 width = 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
4332 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
4333 last_x += width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4334 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4335 x -= width;
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
25083
d3b7d7d2bca8 (x_setup_relief_color): Don't try smart color allocation
Gerd Moellmann <gerd@gnu.org>
parents: 25079
diff changeset
4338 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
4339 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
4340 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4341 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4342 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4343 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
4344 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
4345 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
4346 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4347
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4348 /* 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
4349 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
4350 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
4351 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
4352 i = start;
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4353 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
4354 overlaps_p);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4355 if (tail)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4356 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
4357 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4358 x_reached = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4359
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4360 /* 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
4361 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
4362 strings built above. */
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4363 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
4364 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4365 int dummy_x = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4366 struct glyph_string *h, *t;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4367
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4368 /* Compute overhangs for all glyph strings. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4369 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
4370 x_compute_glyph_string_overhangs (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4371
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4372 /* 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
4373 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
4374 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
4375 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
4376 draws over it. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4377 i = x_left_overwritten (head);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4378 if (i >= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4379 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4380 j = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4381 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
4382 DRAW_NORMAL_TEXT, dummy_x, last_x,
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4383 overlaps_p);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4384 start = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4385 if (real_start)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4386 *real_start = start;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4387 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
4388 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
4389 }
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 /* 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
4392 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
4393 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
4394 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
4395 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
4396 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
4397 strings exist. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4398 i = x_left_overwriting (head);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4399 if (i >= 0)
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 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
4402 DRAW_NORMAL_TEXT, dummy_x, last_x,
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4403 overlaps_p);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4404 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
4405 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4406 if (real_start)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4407 *real_start = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4408 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
4409 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
4410 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4411
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4412 /* 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
4413 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
4414 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
4415 over it. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4416 i = x_right_overwritten (tail);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4417 if (i >= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4418 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4419 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
4420 DRAW_NORMAL_TEXT, x, last_x,
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4421 overlaps_p);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4422 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
4423 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
4424 if (real_end)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4425 *real_end = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4426 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4427
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4428 /* 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
4429 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
4430 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
4431 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
4432 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
4433 i = x_right_overwriting (tail);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4434 if (i >= 0)
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 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
4437 DRAW_NORMAL_TEXT, x, last_x,
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4438 overlaps_p);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4439 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
4440 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4441 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
4442 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
4443 if (real_end)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4444 *real_end = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4445 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4446 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4447
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4448 /* Draw all strings. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4449 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
4450 x_draw_glyph_string (s);
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 /* 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
4453 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
4454 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
4455 if (!row->full_width_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4456 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4457 if (area > LEFT_MARGIN_AREA)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4458 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
4459 if (area > TEXT_AREA)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4460 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
4461 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4462 return x_reached;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4463 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4464
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4465
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4466 /* 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
4467
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4468 static void
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4469 x_fix_overlapping_area (w, row, area)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4470 struct window *w;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4471 struct glyph_row *row;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4472 enum glyph_row_area area;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4473 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4474 int i, x;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4475
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4476 BLOCK_INPUT;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4477
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4478 if (area == LEFT_MARGIN_AREA)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4479 x = 0;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4480 else if (area == TEXT_AREA)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4481 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
4482 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4483 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
4484 + window_box_width (w, TEXT_AREA));
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4485
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4486 for (i = 0; i < row->used[area];)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4487 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4488 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
4489 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4490 int start = i, start_x = x;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4491
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4492 do
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4493 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4494 x += row->glyphs[area][i].pixel_width;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4495 ++i;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4496 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4497 while (i < row->used[area]
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4498 && row->glyphs[area][i].overlaps_vertically_p);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4499
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4500 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
4501 (row->inverse_p
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4502 ? DRAW_INVERSE_VIDEO : DRAW_NORMAL_TEXT),
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4503 NULL, NULL, 1);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4504 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4505 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4506 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4507 x += row->glyphs[area][i].pixel_width;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4508 ++i;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4509 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4510 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4511
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4512 UNBLOCK_INPUT;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4513 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4514
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4515
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4516 /* 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
4517 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
4518 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
4519 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
4520 row being updated. */
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 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4523 x_write_glyphs (start, len)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4524 struct glyph *start;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4525 int len;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4526 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4527 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
4528
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4529 xassert (updated_window && updated_row);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4530 BLOCK_INPUT;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4531
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4532 /* Write glyphs. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4533
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4534 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
4535 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
4536 updated_row, updated_area,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4537 hpos, hpos + len,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4538 (updated_row->inverse_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4539 ? DRAW_INVERSE_VIDEO : DRAW_NORMAL_TEXT),
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
4540 &real_start, &real_end, 0);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4541
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4542 /* 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
4543 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
4544 real_end - real_start);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4545
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4546 UNBLOCK_INPUT;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4547
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4548 /* Advance the output cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4549 output_cursor.hpos += len;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4550 output_cursor.x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4551 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4552
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4553
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4554 /* 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
4555
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4556 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4557 x_insert_glyphs (start, len)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4558 struct glyph *start;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4559 register int len;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4560 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4561 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4562 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4563 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
4564 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4565 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4566 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
4567
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4568 xassert (updated_window && updated_row);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4569 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4570 w = updated_window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4571 f = XFRAME (WINDOW_FRAME (w));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4572
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4573 /* 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
4574 row = updated_row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4575 line_height = row->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4576
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4577 /* 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
4578 shift_by_width = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4579 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
4580 shift_by_width += glyph->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4581
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4582 /* 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
4583 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
4584 - output_cursor.x
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4585 - shift_by_width);
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 /* Shift right. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4588 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
4589 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
4590 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
4591 f->output_data.x->normal_gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4592 frame_x, frame_y,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4593 shifted_region_width, line_height,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4594 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
4595
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4596 /* Write the glyphs. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4597 hpos = start - row->glyphs[updated_area];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4598 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
4599 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
4600 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
4601
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4602 /* Advance the output cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4603 output_cursor.hpos += len;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4604 output_cursor.x += shift_by_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4605 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4606 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4607
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4608
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4609 /* 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
4610 for X frames. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4611
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4612 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4613 x_delete_glyphs (n)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4614 register int n;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4615 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4616 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4617 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4618
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4619
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4620 /* 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
4621 (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
4622 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
4623
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4624 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
4625 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
4626
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4627 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4628 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
4629 int to_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4630 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4631 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4632 struct window *w = updated_window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4633 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
4634 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
4635
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4636 xassert (updated_window && updated_row);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4637 f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4638
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4639 if (updated_row->full_width_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4640 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4641 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
4642 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
4643 && !w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4644 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
4645 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4646 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4647 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
4648 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
4649
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4650 /* 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
4651 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
4652 if (to_x == 0)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4653 return;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4654 else if (to_x < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4655 to_x = max_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4656 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4657 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
4658
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4659 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
4660
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
4661 /* 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
4662 if (!updated_row->full_width_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4663 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
4664
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4665 from_x = output_cursor.x;
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 /* Translate to frame coordinates. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4668 if (updated_row->full_width_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4669 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4670 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
4671 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
4672 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4673 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4674 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4675 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
4676 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
4677 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4678
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4679 min_y = WINDOW_DISPLAY_TOP_LINE_HEIGHT (w);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4680 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
4681 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
4682
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4683 /* 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
4684 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
4685 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4686 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4687 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
4688 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
4689 False);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4690 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4691 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4692 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4693
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4694
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4695 /* Clear entire frame. If updating_frame is non-null, clear that
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4696 frame. Otherwise clear selected_frame. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4697
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4698 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4699 x_clear_frame ()
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4700 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4701 struct frame *f;
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 if (updating_frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4704 f = updating_frame;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4705 else
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
4706 f = selected_frame;
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
4707
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4708 /* 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
4709 longer visible. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4710 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
4711 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
4712 output_cursor.x = -1;
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 /* 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
4715 follow an explicit cursor_to. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4716 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
4717 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
4718
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
4719 /* 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
4720 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
4721 x_scroll_bar_clear (f);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4722
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
4723 XFlush (FRAME_X_DISPLAY (f));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4724 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4725 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4726
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4727
6791
7036e4fd549f (dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents: 6767
diff changeset
4728
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4729 /* 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
4730
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4731 /* 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
4732 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
4733
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4734 #if defined (HAVE_TIMEVAL) && defined (HAVE_SELECT)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4735
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4736
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4737 /* 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
4738 *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
4739
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4740 static int
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4741 timeval_subtract (result, x, y)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4742 struct timeval *result, x, y;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4743 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4744 /* 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
4745 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
4746 if (x.tv_usec < y.tv_usec)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4747 {
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4748 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
4749 y.tv_usec -= 1000000 * nsec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4750 y.tv_sec += nsec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4751 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4752
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4753 if (x.tv_usec - y.tv_usec > 1000000)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4754 {
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4755 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
4756 y.tv_usec += 1000000 * nsec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4757 y.tv_sec -= nsec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4758 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4759
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4760 /* 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
4761 positive. */
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4762 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
4763 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
4764
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4765 /* 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
4766 negative. */
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4767 return x.tv_sec < y.tv_sec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4768 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4769
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
4770 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
4771 XTflash (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
4772 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4773 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4774 BLOCK_INPUT;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4775
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4776 {
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4777 GC gc;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4778
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4779 /* 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
4780 pixels into background pixels. */
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4781 {
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4782 XGCValues values;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4783
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4784 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
4785 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
4786 ^ f->output_data.x->background_pixel);
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
4787
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
4788 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
4789 GCFunction | GCForeground, &values);
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4790 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4791
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4792 {
16352
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4793 /* 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
4794 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
4795 /* 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
4796 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
4797 /* 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
4798 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
4799 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
4800
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4801 int width;
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4802
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4803 /* 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
4804 edge it is next to. */
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4805 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
4806 {
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4807 case vertical_scroll_bar_left:
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4808 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
4809 break;
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4810
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4811 case vertical_scroll_bar_right:
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4812 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
4813 break;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4814
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4815 default:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4816 break;
16352
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4817 }
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4818
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4819 width = flash_right - flash_left;
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4820
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4821 /* 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
4822 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
4823 {
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4824 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
4825 flash_left,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4826 (FRAME_INTERNAL_BORDER_WIDTH (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4827 + FRAME_TOOLBAR_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
4828 width, flash_height);
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4829 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
4830 flash_left,
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4831 (height - flash_height
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4832 - FRAME_INTERNAL_BORDER_WIDTH (f)),
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4833 width, flash_height);
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4834 }
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4835 else
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4836 /* 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
4837 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
4838 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
4839 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
4840
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4841 x_flush (f);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4842
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4843 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4844 struct timeval wakeup;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4845
5362
d1fa597d923d (XTflush): FIx typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 5357
diff changeset
4846 EMACS_GET_TIME (wakeup);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4847
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4848 /* 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
4849 wakeup.tv_usec += 150000;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4850 wakeup.tv_sec += (wakeup.tv_usec / 1000000);
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4851 wakeup.tv_usec %= 1000000;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4852
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4853 /* Keep waiting until past the time wakeup. */
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4854 while (1)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4855 {
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4856 struct timeval timeout;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4857
5362
d1fa597d923d (XTflush): FIx typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 5357
diff changeset
4858 EMACS_GET_TIME (timeout);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4859
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4860 /* In effect, timeout = wakeup - timeout.
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4861 Break if result would be negative. */
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4862 if (timeval_subtract (&timeout, wakeup, timeout))
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4863 break;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4864
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4865 /* 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
4866 select (0, NULL, NULL, NULL, &timeout);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4867 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4868 }
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
4869
16352
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4870 /* 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
4871 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
4872 {
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4873 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
4874 flash_left,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4875 (FRAME_INTERNAL_BORDER_WIDTH (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4876 + FRAME_TOOLBAR_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
4877 width, flash_height);
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4878 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
4879 flash_left,
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4880 (height - flash_height
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4881 - FRAME_INTERNAL_BORDER_WIDTH (f)),
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4882 width, flash_height);
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4883 }
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4884 else
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
4885 /* 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
4886 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
4887 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
4888 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
4889
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
4890 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
4891 x_flush (f);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4892 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4893 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4894
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4895 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4896 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4897
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4898 #endif /* defined (HAVE_TIMEVAL) && defined (HAVE_SELECT) */
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4899
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4900
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4901 /* Make audible bell. */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4902
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
4903 #define XRINGBELL XBell (FRAME_X_DISPLAY (selected_frame), 0)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4904
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
4905 void
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4906 XTring_bell ()
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4907 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
4908 if (FRAME_X_DISPLAY (selected_frame) == 0)
3243
48d20a0b229a (XTring_bell): Do nothing if x_current_connection is 0.
Richard M. Stallman <rms@gnu.org>
parents: 3218
diff changeset
4909 return;
48d20a0b229a (XTring_bell): Do nothing if x_current_connection is 0.
Richard M. Stallman <rms@gnu.org>
parents: 3218
diff changeset
4910
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4911 #if defined (HAVE_TIMEVAL) && defined (HAVE_SELECT)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4912 if (visible_bell)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
4913 XTflash (selected_frame);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4914 else
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4915 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4916 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4917 BLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4918 XRINGBELL;
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
4919 XFlush (FRAME_X_DISPLAY (selected_frame));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4920 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4921 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4922 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4923
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4924
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4925 /* Specify how many text lines, from the top of the window,
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4926 should be affected by insert-lines and delete-lines operations.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4927 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
4928 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
4929
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
4930 static void
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4931 XTset_terminal_window (n)
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4932 register int n;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4933 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4934 /* This function intentionally left blank. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4935 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4936
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4937
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4938
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4939 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4940 Line Dance
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4941 ***********************************************************************/
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 /* 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
4944 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
4945
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4946 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4947 x_ins_del_lines (vpos, n)
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
4948 int vpos, n;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4949 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4950 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4951 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4952
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4953
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4954 /* 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
4955
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4956 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4957 x_scroll_run (w, run)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4958 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4959 struct run *run;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4960 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4961 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4962 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
4963
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4964 /* 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
4965 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
4966 left and right of W. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4967 window_box (w, -1, &x, &y, &width, &height);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4968 width += 2 * FRAME_X_FLAGS_AREA_WIDTH (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4969 x -= FRAME_X_FLAGS_AREA_WIDTH (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4970
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4971 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
4972 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
4973 bottom_y = y + height;
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 if (to_y < from_y)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4976 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4977 /* 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
4978 line at the bottom. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4979 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
4980 height = bottom_y - from_y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4981 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4982 height = run->height;
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 else
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 /* 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
4987 at the bottom. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4988 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
4989 height = bottom_y - to_y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4990 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4991 height = run->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4992 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4993
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4994 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4995
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4996 /* 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
4997 updated_window = w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4998 x_clear_cursor (w);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4999
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5000 XCopyArea (FRAME_X_DISPLAY (f),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5001 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
5002 f->output_data.x->normal_gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5003 x, from_y,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5004 width, height,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5005 x, to_y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5006
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5007 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5008 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5009
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5010
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5011
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5012 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5013 Exposure Events
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5014 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5015
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5016 /* 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
5017 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
5018 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
5019 the entire frame. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5020
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5021 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5022 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
5023 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5024 int x, y, w, h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5025 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5026 XRectangle r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5027
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5028 TRACE ((stderr, "expose_frame "));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5029
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5030 /* 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
5031 if (FRAME_GARBAGED_P (f))
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 TRACE ((stderr, " garbaged\n"));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5034 return;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5037 /* 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
5038 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
5039 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
5040 if (FRAME_FACE_CACHE (f) == NULL
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5041 || 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
5042 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5043 TRACE ((stderr, " no faces\n"));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5044 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5045 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5046
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5047 if (w == 0 || h == 0)
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 r.x = r.y = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5050 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
5051 r.height = CANON_Y_UNIT (f) * f->height;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5052 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5053 else
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5054 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5055 r.x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5056 r.y = y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5057 r.width = w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5058 r.height = h;
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 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
5062 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
5063
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5064 if (WINDOWP (f->toolbar_window))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5065 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5066 struct window *w = XWINDOW (f->toolbar_window);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5067 XRectangle window_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5068 XRectangle intersection_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5069 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
5070
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5071
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5072 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
5073 window_rect.x = window_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5074 window_rect.y = window_y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5075 window_rect.width = window_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5076 window_rect.height = window_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5077
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5078 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
5079 expose_window (w, &intersection_rect);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5080 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5081
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5082 #ifndef USE_X_TOOLKIT
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5083 if (WINDOWP (f->menu_bar_window))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5084 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5085 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
5086 XRectangle window_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5087 XRectangle intersection_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5088 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
5089
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5090
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5091 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
5092 window_rect.x = window_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5093 window_rect.y = window_y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5094 window_rect.width = window_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5095 window_rect.height = window_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5096
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5097 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
5098 expose_window (w, &intersection_rect);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5099 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5100 #endif /* not USE_X_TOOLKIT */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5101 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5102
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5103
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5104 /* 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
5105 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
5106
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5107 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5108 expose_window_tree (w, r)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5109 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5110 XRectangle *r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5111 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5112 while (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5113 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5114 if (!NILP (w->hchild))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5115 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
5116 else if (!NILP (w->vchild))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5117 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
5118 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5119 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5120 XRectangle window_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5121 XRectangle intersection_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5122 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5123 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
5124
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5125 /* Frame-relative pixel rectangle of W. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5126 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
5127 &window_height);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5128 window_rect.x
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5129 = (window_x
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5130 - FRAME_X_FLAGS_AREA_WIDTH (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5131 - FRAME_LEFT_SCROLL_BAR_WIDTH (f) * CANON_Y_UNIT (f));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5132 window_rect.y = window_y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5133 window_rect.width
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5134 = (window_width
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5135 + 2 * FRAME_X_FLAGS_AREA_WIDTH (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5136 + 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
5137 window_rect.height
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5138 = 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
5139
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5140 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
5141 expose_window (w, &intersection_rect);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5142 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5143
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5144 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
5145 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5146 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5147
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5148
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5149 /* 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
5150 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
5151
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5152 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5153 expose_area (w, row, r, area)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5154 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5155 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5156 XRectangle *r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5157 enum glyph_row_area area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5158 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5159 int x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5160 struct glyph *first = row->glyphs[area];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5161 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
5162 struct glyph *last;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5163 int first_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5164
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5165 /* 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
5166 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
5167 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
5168 if (area == LEFT_MARGIN_AREA)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5169 x = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5170 else if (area == TEXT_AREA)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5171 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
5172 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5173 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
5174 + window_box_width (w, TEXT_AREA));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5175
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5176 /* Find the first glyph that must be redrawn. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5177 while (first < end
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5178 && x + first->pixel_width < r->x)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5179 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5180 x += first->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5181 ++first;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5182 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5183
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5184 /* Find the last one. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5185 last = first;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5186 first_x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5187 while (last < end
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5188 && x < r->x + r->width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5189 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5190 x += last->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5191 ++last;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5192 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5193
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5194 /* Repaint. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5195 if (last > first)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5196 x_draw_glyphs (w, first_x, row, area,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5197 first - row->glyphs[area],
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5198 last - row->glyphs[area],
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5199 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
5200 NULL, NULL, 0);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5201 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5202
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5203
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5204 /* 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
5205 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
5206
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5207 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5208 expose_line (w, row, r)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5209 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5210 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5211 XRectangle *r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5212 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5213 xassert (row->enabled_p);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5214
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5215 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
5216 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
5217 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
5218 NULL, NULL, 0);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5219 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5220 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5221 if (row->used[LEFT_MARGIN_AREA])
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5222 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
5223 if (row->used[TEXT_AREA])
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5224 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
5225 if (row->used[RIGHT_MARGIN_AREA])
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5226 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
5227 x_draw_row_bitmaps (w, row);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5228 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5229 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5230
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5231
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5232 /* 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
5233
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5234 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5235 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
5236 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5237 XRectangle *r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5238 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5239 XRectangle cr, result;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5240 struct glyph *cursor_glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5241
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5242 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
5243 if (cursor_glyph)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5244 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5245 cr.x = w->phys_cursor.x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5246 cr.y = w->phys_cursor.y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5247 cr.width = cursor_glyph->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5248 cr.height = w->phys_cursor_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5249 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
5250 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5251 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5252 return 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5253 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5254
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5255
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5256 /* 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
5257 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
5258
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5259 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5260 expose_window (w, r)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5261 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5262 XRectangle *r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5263 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5264 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5265 int y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5266 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
5267 int cursor_cleared_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5268
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5269 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
5270 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
5271
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5272 /* Convert to window coordinates. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5273 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
5274 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
5275
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5276 /* Turn off the cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5277 if (!w->pseudo_window_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5278 && 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
5279 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5280 x_clear_cursor (w);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5281 cursor_cleared_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5282 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5283 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5284 cursor_cleared_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5285
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5286 /* 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
5287 row = w->current_matrix->rows;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5288 y = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5289 while (row->enabled_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5290 && y < yb
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5291 && y + row->height < r->y)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5292 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5293 y += row->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5294 ++row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5295 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5296
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5297 /* 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
5298 while (row->enabled_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5299 && y < yb
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5300 && y < r->y + r->height)
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 expose_line (w, row, r);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5303 y += row->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5304 ++row;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5307 /* 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
5308 if (WINDOW_WANTS_MODELINE_P (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5309 && (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
5310 row->enabled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5311 && row->y < r->y + r->height)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5312 expose_line (w, row, r);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5313
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5314 if (!w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5315 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5316 /* Draw border between windows. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5317 x_draw_vertical_border (w);
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 /* Turn the cursor on again. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5320 if (cursor_cleared_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5321 x_update_window_cursor (w, 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5322 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5323 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5324
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5325
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5326 /* 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
5327 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
5328 empty. */
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 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5331 x_intersect_rectangles (r1, r2, result)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5332 XRectangle *r1, *r2, *result;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5333 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5334 XRectangle *left, *right;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5335 XRectangle *upper, *lower;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5336 int intersection_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5337
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5338 /* 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
5339 if (r1->x < r2->x)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5340 left = r1, right = r2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5341 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5342 left = r2, right = r1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5343
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5344 /* 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
5345 otherwise there is no intersection. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5346 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
5347 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5348 result->x = right->x;
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 /* 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
5351 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
5352 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
5353 - result->x);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5354
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5355 /* Same game for Y. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5356 if (r1->y < r2->y)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5357 upper = r1, lower = r2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5358 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5359 upper = r2, lower = r1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5360
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5361 /* 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
5362 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
5363 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
5364 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5365 result->y = lower->y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5366
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5367 /* 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
5368 ends of upper and lower. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5369 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
5370 upper->y + upper->height)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5371 - result->y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5372 intersection_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5373 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5374 }
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 return intersection_p;
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
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
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5382
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5383 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
5384 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
5385 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5386 {
3943
cbdf67dd68d0 * xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents: 3938
diff changeset
5387 /* 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
5388 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
5389 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
5390 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
5391 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
5392 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
5393 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
5394 UNBLOCK_INPUT;
12431
80a5aedfb4c7 (XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents: 12192
diff changeset
5395 x_update_cursor (f, 1);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5396 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5397
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5398 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
5399 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
5400 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5401 {
3943
cbdf67dd68d0 * xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents: 3938
diff changeset
5402 /* 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
5403 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
5404 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
5405 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
5406 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
5407 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
5408 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
5409 UNBLOCK_INPUT;
12431
80a5aedfb4c7 (XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents: 12192
diff changeset
5410 x_update_cursor (f, 1);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5411 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5412
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5413 /* The focus has changed. Update the frames as necessary to reflect
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5414 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
5415 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
5416 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
5417 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
5418
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
5419 static void
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5420 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
5421 struct x_display_info *dpyinfo;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5422 struct frame *frame;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5423 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5424 struct frame *old_focus = dpyinfo->x_focus_frame;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5425
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5426 if (frame != dpyinfo->x_focus_frame)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5427 {
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
5428 /* Set this before calling other routines, so that they see
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5429 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
5430 dpyinfo->x_focus_frame = frame;
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
5431
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
5432 if (old_focus && old_focus->auto_lower)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5433 x_lower_frame (old_focus);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5434
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5435 #if 0
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5436 selected_frame = frame;
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
5437 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
5438 selected_frame);
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5439 Fselect_window (selected_frame->selected_window);
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5440 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
5441 #endif /* ! 0 */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5442
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5443 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
5444 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
5445 else
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
5446 pending_autoraise_frame = 0;
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
5447 }
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
5448
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5449 x_frame_rehighlight (dpyinfo);
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
5450 }
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
5451
10223
97fc8c6b4a74 (XTupdate_begin): Discard records of prior mouse highlight
Richard M. Stallman <rms@gnu.org>
parents: 9823
diff changeset
5452 /* 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
5453
97fc8c6b4a74 (XTupdate_begin): Discard records of prior mouse highlight
Richard M. Stallman <rms@gnu.org>
parents: 9823
diff changeset
5454 void
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5455 x_mouse_leave (dpyinfo)
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5456 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
5457 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5458 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
5459 }
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
5460
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5461 /* 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
5462 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
5463 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
5464
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5465 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
5466 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
5467 the appropriate X display info. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5468
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
5469 static void
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5470 XTframe_rehighlight (frame)
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5471 struct frame *frame;
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
5472 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5473 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
5474 }
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5475
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5476 static void
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5477 x_frame_rehighlight (dpyinfo)
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5478 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
5479 {
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5480 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
5481
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5482 if (dpyinfo->x_focus_frame)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5483 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5484 dpyinfo->x_highlight_frame
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5485 = ((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
5486 ? 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
5487 : dpyinfo->x_focus_frame);
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5488 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
5489 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5490 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
5491 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
5492 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5493 }
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
5494 else
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5495 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
5496
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
5497 if (dpyinfo->x_highlight_frame != old_highlight)
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
5498 {
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
5499 if (old_highlight)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5500 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
5501 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
5502 frame_highlight (dpyinfo->x_highlight_frame);
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
5503 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5504 }
24991
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
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5507
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5508 /* Keyboard processing - modifier keys, vendor-specific keysyms, etc. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5509
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5510 /* 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
5511 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
5512 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
5513 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
5514 {
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
5515 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
5516 KeySym *syms;
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5517 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
5518 XModifierKeymap *mods;
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5519
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
5520 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
5521 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
5522 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
5523 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
5524 dpyinfo->hyper_mod_mask = 0;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
5525
2127
adaf588e32a6 * xterm.c (x_find_modifier_meanings): XDisplayKeycodes only
Jim Blandy <jimb@redhat.com>
parents: 2064
diff changeset
5526 #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
5527 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
5528 #else
13884
26245345f6f1 (x_find_modifier_meanings): Fix !X11R4 code to use dpyinfo.
Richard M. Stallman <rms@gnu.org>
parents: 13782
diff changeset
5529 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
5530 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
5531 #endif
adaf588e32a6 * xterm.c (x_find_modifier_meanings): XDisplayKeycodes only
Jim Blandy <jimb@redhat.com>
parents: 2064
diff changeset
5532
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
5533 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
5534 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
5535 &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
5536 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
5537
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
5538 /* 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
5539 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
5540 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5541 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
5542
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5543 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
5544 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
5545 {
10287
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
5546 KeyCode code
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
5547 = 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
5548
6560
a071babfa9ea (x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents: 6521
diff changeset
5549 /* Zeroes are used for filler. Skip them. */
a071babfa9ea (x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents: 6521
diff changeset
5550 if (code == 0)
a071babfa9ea (x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents: 6521
diff changeset
5551 continue;
a071babfa9ea (x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents: 6521
diff changeset
5552
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5553 /* 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
5554 {
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5555 int code_col;
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5556
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5557 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
5558 {
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
5559 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
5560
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
5561 switch (sym)
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5562 {
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
5563 case XK_Meta_L:
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
5564 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
5565 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
5566 break;
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
5567
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
5568 case XK_Alt_L:
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
5569 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
5570 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
5571 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
5572
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
5573 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
5574 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
5575 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
5576 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
5577
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
5578 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
5579 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
5580 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
5581 break;
1436
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
5582
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
5583 case XK_Shift_Lock:
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
5584 /* 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
5585 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
5586 dpyinfo->shift_lock_mask = LockMask;
1436
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
5587 break;
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5588 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5589 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5590 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5591 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5592 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5593
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
5594 /* 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
5595 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
5596 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
5597 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
5598 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
5599 }
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
5600
2923
c8997402dd6b (x_find_modifier_meanings): If some keys are meta and alt,
Richard M. Stallman <rms@gnu.org>
parents: 2882
diff changeset
5601 /* 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
5602 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
5603 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
5604 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
5605 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
5606 }
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
5607
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5608 XFree ((char *) syms);
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
5609 XFreeModifiermap (mods);
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5610 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
5611
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
5612 /* 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
5613 Emacs uses. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5614
1530
a7f8a1fe258e * xterm.c (x_convert_modifiers): Declare this to return an
Jim Blandy <jimb@redhat.com>
parents: 1436
diff changeset
5615 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
5616 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
5617 struct x_display_info *dpyinfo;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5618 unsigned int state;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5619 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
5620 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
5621 | ((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
5622 | ((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
5623 | ((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
5624 | ((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
5625 | ((state & dpyinfo->hyper_mod_mask) ? hyper_modifier : 0));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5626 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5627
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
5628 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
5629 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
5630 struct x_display_info *dpyinfo;
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
5631 unsigned int state;
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
5632 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
5633 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
5634 | ((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
5635 | ((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
5636 | ((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
5637 | ((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
5638 | ((state & meta_modifier) ? dpyinfo->meta_mod_mask : 0));
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
5639 }
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
5640
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
5641 /* Convert a keysym to its name. */
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
5642
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
5643 char *
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
5644 x_get_keysym_name (keysym)
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
5645 KeySym keysym;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
5646 {
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
5647 char *value;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
5648
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
5649 BLOCK_INPUT;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
5650 value = XKeysymToString (keysym);
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
5651 UNBLOCK_INPUT;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
5652
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
5653 return value;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
5654 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5655
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5656
3585
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
5657
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
5658 /* Mouse clicks and mouse movement. Rah. */
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
5659
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5660 /* 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
5661 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
5662 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
5663 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
5664
6023
67aa546e4ff1 (construct_menu_click): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 6022
diff changeset
5665 void
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
5666 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
5667 FRAME_PTR f;
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
5668 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
5669 register int *x, *y;
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
5670 XRectangle *bounds;
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
5671 int noclip;
3585
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
5672 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5673 /* 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
5674 even for negative values. */
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
5675 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
5676 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
5677 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
5678 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
5679
3585
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
5680 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
5681 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
5682
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
5683 if (bounds)
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
5684 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
5685 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
5686 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
5687 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
5688 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
5689 }
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
5690
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
5691 if (!noclip)
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
5692 {
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
5693 if (pix_x < 0)
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
5694 pix_x = 0;
16301
a02555b4b2b9 (x_scroll_bar_create, x_scroll_bar_move):
Richard M. Stallman <rms@gnu.org>
parents: 16251
diff changeset
5695 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
5696 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
5697
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
5698 if (pix_y < 0)
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
5699 pix_y = 0;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
5700 else if (pix_y > f->height)
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
5701 pix_y = f->height;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
5702 }
3585
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
5703
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
5704 *x = pix_x;
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
5705 *y = pix_y;
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
5706 }
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
5707
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5708
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5709 /* 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
5710 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
5711 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
5712 return 0. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5713
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5714 int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5715 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
5716 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5717 int hpos, vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5718 int *frame_x, *frame_y;
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 int success_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5721
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5722 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
5723 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
5724
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5725 if (display_completed)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5726 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5727 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
5728 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
5729 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
5730
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5731 *frame_y = row->y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5732 *frame_x = row->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5733 while (glyph < end)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5734 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5735 *frame_x += glyph->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5736 ++glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5737 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5738
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5739 success_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5740 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5741 else
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 *frame_y = *frame_x = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5744 success_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5745 }
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 *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
5748 *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
5749 return success_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5750 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5751
6055
a9f61727a90c (construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents: 6023
diff changeset
5752
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5753 /* Prepare a mouse-event in *RESULT for placement in the input queue.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5754
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5755 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
5756 the mouse. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5757
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5758 static Lisp_Object
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5759 construct_mouse_click (result, event, f)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5760 struct input_event *result;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5761 XButtonEvent *event;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5762 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5763 {
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5764 /* 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
5765 otherwise. */
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5766 result->kind = mouse_click;
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
5767 result->code = event->button - Button1;
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 642
diff changeset
5768 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
5769 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
5770 event->state)
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
5771 | (event->type == ButtonRelease
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
5772 ? up_modifier
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
5773 : down_modifier));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5774
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5775 XSETINT (result->x, event->x);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5776 XSETINT (result->y, event->y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5777 XSETFRAME (result->frame_or_window, f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5778 return Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5779 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5780
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5781 #if 0 /* This function isn't called. --gerd */
6022
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
5782
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
5783 /* Prepare a menu-event in *RESULT for placement in the input queue. */
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
5784
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
5785 static Lisp_Object
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
5786 construct_menu_click (result, event, f)
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
5787 struct input_event *result;
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
5788 XButtonEvent *event;
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
5789 struct frame *f;
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
5790 {
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
5791 /* Make the event type no_event; we'll change that when we decide
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
5792 otherwise. */
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
5793 result->kind = mouse_click;
17371
97283cd93432 (construct_menu_click, note_mouse_highlight, fast_find_position):
Karl Heuer <kwzh@gnu.org>
parents: 17316
diff changeset
5794 result->code = event->button - Button1;
6022
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
5795 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
5796 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
5797 event->state)
6022
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
5798 | (event->type == ButtonRelease
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
5799 ? up_modifier
6022
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
5800 : down_modifier));
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
5801
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
5802 XSETINT (result->x, event->x);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
5803 XSETINT (result->y, -1);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
5804 XSETFRAME (result->frame_or_window, f);
6022
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
5805 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5806
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5807 #endif /* 0 */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5808
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
5809
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
5810 /* Function to report a mouse movement to the mainstream Emacs code.
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
5811 The input handler calls this.
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
5812
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
5813 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
5814 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
5815 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
5816 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
5817
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5818 static XMotionEvent last_mouse_motion_event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5819 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
5820
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
5821 static void
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5822 note_mouse_movement (frame, event)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
5823 FRAME_PTR frame;
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
5824 XMotionEvent *event;
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
5825 {
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
5826 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
5827 last_mouse_motion_event = *event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5828 XSETFRAME (last_mouse_motion_frame, frame);
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
5829
7680
8212755ff793 (note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 7651
diff changeset
5830 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
5831 {
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
5832 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
5833 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
5834 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
5835 }
8212755ff793 (note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 7651
diff changeset
5836
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
5837 /* 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
5838 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
5839 || 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
5840 || 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
5841 || 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
5842 {
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
5843 frame->mouse_moved = 1;
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5844 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
5845 note_mouse_highlight (frame, event->x, event->y);
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
5846 }
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
5847 }
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
5848
6644
8e2379ce4fcb (fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents: 6631
diff changeset
5849 /* 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
5850
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5851 int disable_mouse_highlight;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5852
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5853
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5854
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5855 /************************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5856 Mouse Face
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5857 ************************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5858
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5859 /* 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
5860 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
5861 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
5862 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
5863 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
5864 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
5865 date. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5866
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5867 static struct glyph *
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5868 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
5869 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5870 int x, y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5871 int *hpos, *vpos, *area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5872 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5873 struct glyph *glyph, *end;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5874 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5875 int x0, i, left_area_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5876
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5877 /* 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
5878 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
5879 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5880 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
5881 if (!row->enabled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5882 return NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5883 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
5884 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5885 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5886
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5887 *vpos = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5888 *hpos = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5889
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5890 /* 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
5891 if (i == w->current_matrix->nrows)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5892 return NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5893
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5894 /* Get the glyph area containing X. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5895 if (w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5896 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5897 *area = TEXT_AREA;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5898 x0 = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5899 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5900 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5901 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5902 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
5903 if (x < left_area_width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5904 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5905 *area = LEFT_MARGIN_AREA;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5906 x0 = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5907 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5908 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
5909 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5910 *area = TEXT_AREA;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5911 x0 = row->x + left_area_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5912 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5913 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5914 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5915 *area = RIGHT_MARGIN_AREA;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5916 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
5917 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5918 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5919
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5920 /* Find glyph containing X. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5921 glyph = row->glyphs[*area];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5922 end = glyph + row->used[*area];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5923 while (glyph < end)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5924 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5925 if (x < x0 + glyph->pixel_width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5926 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5927 if (w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5928 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5929 else if (BUFFERP (glyph->object))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5930 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5931 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5932
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5933 x0 += glyph->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5934 ++glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5935 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5936
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5937 if (glyph == end)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5938 return NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5939
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5940 *hpos = glyph - row->glyphs[*area];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5941 return glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5942 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5943
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5944
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5945 /* 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
5946 Takes pseudo-windows into account. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5947
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5948 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5949 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
5950 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5951 int *x, *y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5952 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5953 if (w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5954 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5955 /* 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
5956 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
5957 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5958 *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
5959 *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
5960 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5961 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5962 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5963 *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
5964 *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
5965 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5966 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5967
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5968
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5969 /* 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
5970 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
5971 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
5972 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
5973 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
5974
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5975 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5976 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
5977 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5978 int x, mode_line_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5979 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5980 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5981 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
5982 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
5983 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5984
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5985 if (mode_line_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5986 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
5987 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5988 row = MATRIX_TOP_LINE_ROW (w->current_matrix);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5989
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5990 if (row->enabled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5991 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5992 struct glyph *glyph, *end;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5993 Lisp_Object help, map;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5994 int x0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5995
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5996 /* Find the glyph under X. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5997 glyph = row->glyphs[TEXT_AREA];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5998 end = glyph + row->used[TEXT_AREA];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5999 x0 = - (FRAME_LEFT_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
6000 + FRAME_X_FLAGS_AREA_WIDTH (f));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6001 while (glyph < end
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6002 && x >= x0 + glyph->pixel_width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6003 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6004 x0 += glyph->pixel_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6005 ++glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6006 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6007
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6008 if (glyph < end
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6009 && STRINGP (glyph->object)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6010 && XSTRING (glyph->object)->intervals
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6011 && glyph->charpos >= 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6012 && glyph->charpos < XSTRING (glyph->object)->size)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6013 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6014 /* 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
6015 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
6016 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
6017 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
6018 Qhelp_echo, glyph->object);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6019 if (STRINGP (help))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6020 help_echo = help;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6021
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6022 /* 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
6023 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
6024 Qlocal_map, glyph->object);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6025 if (!NILP (Fkeymapp (map)))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6026 cursor = f->output_data.x->nontext_cursor;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6027 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6028 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6029
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6030 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
6031 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6032
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6033
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6034 /* 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
6035 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
6036 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
6037 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
6038
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6039 static void
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6040 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
6041 struct frame *f;
11915
e2ab839155e1 (XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents: 11904
diff changeset
6042 int x, y;
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6043 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6044 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
6045 int portion;
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6046 Lisp_Object window;
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6047 struct window *w;
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6048
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6049 /* 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
6050 #ifdef USE_X_TOOLKIT
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6051 if (popup_activated ())
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6052 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6053 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6054
6644
8e2379ce4fcb (fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents: 6631
diff changeset
6055 if (disable_mouse_highlight)
8e2379ce4fcb (fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents: 6631
diff changeset
6056 return;
8e2379ce4fcb (fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents: 6631
diff changeset
6057
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6058 dpyinfo->mouse_face_mouse_x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6059 dpyinfo->mouse_face_mouse_y = y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6060 dpyinfo->mouse_face_mouse_frame = f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6061
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6062 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
6063 return;
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6064
6660
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
6065 if (gc_in_progress)
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
6066 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6067 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
6068 return;
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
6069 }
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
6070
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6071 /* Which window is that in? */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6072 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
6073
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6074 /* 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
6075 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
6076 clear_mouse_face (dpyinfo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6077
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6078 /* Not on a window -> return. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6079 if (!WINDOWP (window))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6080 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6081
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6082 /* Convert to window-relative pixel coordinates. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6083 w = XWINDOW (window);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6084 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
6085
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6086 /* Handle toolbar window differently since it doesn't display a
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6087 buffer. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6088 if (EQ (window, f->toolbar_window))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6089 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6090 note_toolbar_highlight (f, x, y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6091 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6092 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6093
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6094 if (portion == 1 || portion == 3)
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 /* 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
6097 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
6098 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6099 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6100 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6101 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
6102 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
6103
6791
7036e4fd549f (dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents: 6767
diff changeset
6104 /* 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
6105 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
6106 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
6107 portion == 0
6791
7036e4fd549f (dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents: 6767
diff changeset
6108 && 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
6109 && 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
6110 && (XFASTINT (w->last_overlay_modified)
97283cd93432 (construct_menu_click, note_mouse_highlight, fast_find_position):
Karl Heuer <kwzh@gnu.org>
parents: 17316
diff changeset
6111 == 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
6112 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6113 int hpos, vpos, pos, i, area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6114 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6115
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6116 /* Find the glyph under X/Y. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6117 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
6118
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6119 /* 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
6120 if (glyph == NULL
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6121 || area != TEXT_AREA
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6122 || !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
6123 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6124 clear_mouse_face (dpyinfo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6125 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6126 }
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 pos = glyph->charpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6129 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
6130
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6131 /* 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
6132 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6133 Lisp_Object mouse_face, overlay, position;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6134 Lisp_Object *overlay_vec;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6135 int len, noverlays;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6136 struct buffer *obuf;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6137 int obegv, ozv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6138
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6139 /* 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
6140 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
6141 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6142
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6143 /* 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
6144 overlays_at and compute_char_face. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6145 obuf = current_buffer;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6146 current_buffer = XBUFFER (w->buffer);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6147 obegv = BEGV;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6148 ozv = ZV;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6149 BEGV = BEG;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6150 ZV = Z;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6151
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6152 /* 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
6153 XSETINT (position, pos);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6154
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6155 /* 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
6156 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
6157 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
6158 len = 10;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6159 overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6160 noverlays = overlays_at (pos, 0, &overlay_vec, &len, NULL, NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6161 if (noverlays > len)
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 len = noverlays;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6164 overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6165 noverlays = overlays_at (pos, 0, &overlay_vec, &len, NULL, NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6166 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6167
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6168 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
6169
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6170 /* Check mouse-face highlighting. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6171 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
6172 && vpos >= dpyinfo->mouse_face_beg_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6173 && vpos <= dpyinfo->mouse_face_end_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6174 && (vpos > dpyinfo->mouse_face_beg_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6175 || hpos >= dpyinfo->mouse_face_beg_col)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6176 && (vpos < dpyinfo->mouse_face_end_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6177 || hpos < dpyinfo->mouse_face_end_col
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6178 || dpyinfo->mouse_face_past_end)))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6179 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6180 /* 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
6181 clear_mouse_face (dpyinfo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6182
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6183 /* 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
6184 overlay = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6185 for (i = 0; i < noverlays; i++)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6186 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6187 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
6188 if (!NILP (mouse_face))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6189 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6190 overlay = overlay_vec[i];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6191 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6192 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6193 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6194
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6195 /* 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
6196 if (NILP (overlay))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6197 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
6198
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6199 /* Handle the overlay case. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6200 if (! NILP (overlay))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6201 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6202 /* 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
6203 should be active. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6204 Lisp_Object before, after;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6205 int ignore;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6206
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6207 before = Foverlay_start (overlay);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6208 after = Foverlay_end (overlay);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6209 /* 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
6210 fast_find_position (w, XFASTINT (before),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6211 &dpyinfo->mouse_face_beg_col,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6212 &dpyinfo->mouse_face_beg_row,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6213 &dpyinfo->mouse_face_beg_x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6214 &dpyinfo->mouse_face_beg_y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6215 dpyinfo->mouse_face_past_end
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6216 = !fast_find_position (w, XFASTINT (after),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6217 &dpyinfo->mouse_face_end_col,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6218 &dpyinfo->mouse_face_end_row,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6219 &dpyinfo->mouse_face_end_x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6220 &dpyinfo->mouse_face_end_y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6221 dpyinfo->mouse_face_window = window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6222 dpyinfo->mouse_face_face_id
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6223 = 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
6224 &ignore, pos + 1, 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6225
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6226 /* Display it as active. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6227 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
6228 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6229 /* Handle the text property case. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6230 else if (! NILP (mouse_face))
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 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
6233 should be active. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6234 Lisp_Object before, after, beginning, end;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6235 int ignore;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6236
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6237 beginning = Fmarker_position (w->start);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6238 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
6239 - XFASTINT (w->window_end_pos)));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6240 before
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6241 = 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
6242 Qmouse_face,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6243 w->buffer, beginning);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6244 after
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6245 = 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
6246 w->buffer, end);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6247 /* 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
6248 fast_find_position (w, XFASTINT (before),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6249 &dpyinfo->mouse_face_beg_col,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6250 &dpyinfo->mouse_face_beg_row,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6251 &dpyinfo->mouse_face_beg_x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6252 &dpyinfo->mouse_face_beg_y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6253 dpyinfo->mouse_face_past_end
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6254 = !fast_find_position (w, XFASTINT (after),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6255 &dpyinfo->mouse_face_end_col,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6256 &dpyinfo->mouse_face_end_row,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6257 &dpyinfo->mouse_face_end_x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6258 &dpyinfo->mouse_face_end_y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6259 dpyinfo->mouse_face_window = window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6260 dpyinfo->mouse_face_face_id
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6261 = 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
6262 &ignore, pos + 1, 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6263
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6264 /* Display it as active. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6265 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
6266 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6269 /* Look for a `help-echo' property. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6270 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6271 Lisp_Object help;
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 /* Check overlays first. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6274 help = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6275 for (i = 0; i < noverlays && !STRINGP (help); ++i)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6276 help = Foverlay_get (overlay_vec[i], Qhelp_echo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6277
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6278 /* Try text properties. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6279 if (!STRINGP (help)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6280 && ((STRINGP (glyph->object)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6281 && glyph->charpos >= 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6282 && glyph->charpos < XSTRING (glyph->object)->size)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6283 || (BUFFERP (glyph->object)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6284 && glyph->charpos >= BEGV
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6285 && glyph->charpos < ZV)))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6286 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
6287 Qhelp_echo, glyph->object);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6288
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6289 if (STRINGP (help))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6290 help_echo = help;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6293 BEGV = obegv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6294 ZV = ozv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6295 current_buffer = obuf;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6296 }
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 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6301 redo_mouse_highlight ()
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 if (!NILP (last_mouse_motion_frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6304 && 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
6305 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
6306 last_mouse_motion_event.x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6307 last_mouse_motion_event.y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6308 }
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
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6311
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6312 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6313 Toolbars
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6314 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6315
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6316 static int x_toolbar_item P_ ((struct frame *, int, int,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6317 struct glyph **, int *, int *, int *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6318
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6319 /* Toolbar item index of the item on which a mouse button was pressed
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6320 or -1. */
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 static int last_toolbar_item;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6323
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6324
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6325 /* Get information about the toolbar item at position X/Y on frame F.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6326 Return in *GLYPH a pointer to the glyph of the toolbar item in
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6327 the current matrix of the toolbar window of F, or NULL if not
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6328 on a toolbar item. Return in *PROP_IDX the index of the toolbar
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6329 item in F->current_toolbar_items. Value is
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6330
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6331 -1 if X/Y is not on a toolbar item
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6332 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
6333 1 otherwise. */
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6334
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6335 static int
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6336 x_toolbar_item (f, x, y, glyph, hpos, vpos, prop_idx)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6337 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6338 int x, y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6339 struct glyph **glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6340 int *hpos, *vpos, *prop_idx;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6341 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6342 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
6343 struct window *w = XWINDOW (f->toolbar_window);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6344 int area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6345
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6346 /* Find the glyph under X/Y. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6347 *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
6348 if (*glyph == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6349 return -1;
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 /* Get the start of this toolbar item's properties in
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6352 f->current_toolbar_items. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6353 if (!toolbar_item_info (f, *glyph, prop_idx))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6354 return -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6355
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6356 /* Is mouse on the highlighted item? */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6357 if (EQ (f->toolbar_window, dpyinfo->mouse_face_window)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6358 && *vpos >= dpyinfo->mouse_face_beg_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6359 && *vpos <= dpyinfo->mouse_face_end_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6360 && (*vpos > dpyinfo->mouse_face_beg_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6361 || *hpos >= dpyinfo->mouse_face_beg_col)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6362 && (*vpos < dpyinfo->mouse_face_end_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6363 || *hpos < dpyinfo->mouse_face_end_col
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6364 || dpyinfo->mouse_face_past_end))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6365 return 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6366
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6367 return 1;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6370
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6371 /* Handle mouse button event on the toolbar of frame F, at
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6372 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
6373 or ButtonRelase. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6374
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6375 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6376 x_handle_toolbar_click (f, button_event)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6377 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6378 XButtonEvent *button_event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6379 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6380 struct 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
6381 struct window *w = XWINDOW (f->toolbar_window);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6382 int hpos, vpos, prop_idx;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6383 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6384 Lisp_Object enabled_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6385 int x = button_event->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6386 int y = button_event->y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6387
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6388 /* If not on the highlighted toolbar item, return. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6389 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
6390 if (x_toolbar_item (f, x, y, &glyph, &hpos, &vpos, &prop_idx) != 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6391 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6392
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6393 /* If item is disabled, do nothing. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6394 enabled_p = (XVECTOR (f->current_toolbar_items)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6395 ->contents[prop_idx + TOOLBAR_ITEM_ENABLED_P]);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6396 if (NILP (enabled_p))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6397 return;
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 if (button_event->type == ButtonPress)
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 /* Show item in pressed state. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6402 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
6403 dpyinfo->mouse_face_image_state = DRAW_IMAGE_SUNKEN;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6404 last_toolbar_item = prop_idx;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6405 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6406 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6407 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6408 Lisp_Object key, frame;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6409 struct input_event event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6410
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6411 /* Show item in released state. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6412 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
6413 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
6414
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6415 key = (XVECTOR (f->current_toolbar_items)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6416 ->contents[prop_idx + TOOLBAR_ITEM_KEY]);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6417
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6418 XSETFRAME (frame, f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6419 event.kind = TOOLBAR_EVENT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6420 event.frame_or_window = Fcons (frame, Fcons (Qtoolbar, Qnil));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6421 kbd_buffer_store_event (&event);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6422
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6423 event.kind = TOOLBAR_EVENT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6424 event.frame_or_window = Fcons (frame, key);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6425 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
6426 button_event->state);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6427 kbd_buffer_store_event (&event);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6428 last_toolbar_item = -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6429 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6430 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6431
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6432
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6433 /* Possibly highlight a toolbar item on frame F when mouse moves to
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6434 toolbar window-relative coordinates X/Y. Called from
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6435 note_mouse_highlight. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6436
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6437 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6438 note_toolbar_highlight (f, x, y)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6439 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6440 int x, y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6441 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6442 Lisp_Object window = f->toolbar_window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6443 struct window *w = XWINDOW (window);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6444 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6445 int hpos, vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6446 struct glyph *glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6447 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6448 int i, j, area;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6449 Lisp_Object enabled_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6450 int prop_idx;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6451 enum draw_glyphs_face draw = DRAW_IMAGE_RAISED;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6452 int on_highlight_p, mouse_down_p, rc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6453
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6454 /* 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
6455 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
6456 if (x <= 0 || y <= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6457 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6458 clear_mouse_face (dpyinfo);
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 rc = x_toolbar_item (f, x, y, &glyph, &hpos, &vpos, &prop_idx);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6463 if (rc < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6464 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6465 /* Not on toolbar item. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6466 clear_mouse_face (dpyinfo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6467 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6468 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6469 else if (rc == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6470 /* On same toolbar item as before. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6471 goto set_help_echo;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6472
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6473 clear_mouse_face (dpyinfo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6474
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6475 /* Mouse is down, but on different toolbar item? */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6476 mouse_down_p = (dpyinfo->grabbed
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6477 && f == last_mouse_frame
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6478 && FRAME_LIVE_P (f));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6479 if (mouse_down_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6480 && last_toolbar_item != prop_idx)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6481 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6482
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6483 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
6484 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
6485
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6486 /* If toolbar item is not enabled, don't highlight it. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6487 enabled_p = (XVECTOR (f->current_toolbar_items)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6488 ->contents[prop_idx + TOOLBAR_ITEM_ENABLED_P]);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6489 if (!NILP (enabled_p))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6490 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6491 /* 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
6492 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
6493 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
6494 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
6495 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
6496
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6497 /* 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
6498 dpyinfo->mouse_face_beg_col = hpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6499 dpyinfo->mouse_face_beg_row = vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6500 dpyinfo->mouse_face_beg_x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6501 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
6502 dpyinfo->mouse_face_past_end = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6503
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6504 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
6505 dpyinfo->mouse_face_end_row = vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6506 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
6507 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
6508 dpyinfo->mouse_face_window = window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6509 dpyinfo->mouse_face_face_id = TOOLBAR_FACE_ID;
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 /* Display it as active. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6512 show_mouse_face (dpyinfo, draw);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6513 dpyinfo->mouse_face_image_state = draw;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6514 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6515
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6516 set_help_echo:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6517
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6518 /* Set help_echo to a help string.to display for this toolbar item.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6519 XTread_socket does the rest. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6520 help_echo = (XVECTOR (f->current_toolbar_items)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6521 ->contents[prop_idx + TOOLBAR_ITEM_HELP]);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6522 if (!STRINGP (help_echo))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6523 help_echo = (XVECTOR (f->current_toolbar_items)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6524 ->contents[prop_idx + TOOLBAR_ITEM_CAPTION]);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6525 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6526
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6527
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6528
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6529 /* 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
6530 *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
6531 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
6532 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
6533 last line in W. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6534
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6535 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6536 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
6537 struct window *w;
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6538 int pos;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6539 int *hpos, *vpos, *x, *y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6540 {
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6541 int i;
6644
8e2379ce4fcb (fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents: 6631
diff changeset
6542 int lastcol;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6543 int maybe_next_line_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6544 int line_start_position;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6545 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
6546 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
6547 struct glyph_row *best_row = row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6548 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
6549 int current_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6550
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6551 while (row->y < yb)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6552 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6553 if (row->used[TEXT_AREA])
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6554 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
6555 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6556 line_start_position = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6557
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6558 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
6559 break;
9762
567e3670acc3 (fast_find_position): Special case if POS is end of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 9741
diff changeset
6560 /* 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
6561 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
6562 else if (line_start_position == pos
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6563 && pos == BUF_ZV (XBUFFER (w->buffer)))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6564 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6565 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
6566 break;
567e3670acc3 (fast_find_position): Special case if POS is end of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 9741
diff changeset
6567 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6568 else if (line_start_position > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6569 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6570 best_row = row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6571 best_row_vpos = row_vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6572 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6573
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6574 ++row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6575 ++row_vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6576 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6577
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6578 /* 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
6579 lastcol = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6580 current_x = best_row->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6581 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
6582 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6583 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
6584 int charpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6585
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6586 charpos = glyph->charpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6587 if (charpos == pos)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6588 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6589 *hpos = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6590 *vpos = best_row_vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6591 *x = current_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6592 *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
6593 return 1;
8e2379ce4fcb (fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents: 6631
diff changeset
6594 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6595 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
6596 break;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6597 else if (charpos > 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6598 lastcol = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6599
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6600 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
6601 }
8e2379ce4fcb (fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents: 6631
diff changeset
6602
9762
567e3670acc3 (fast_find_position): Special case if POS is end of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 9741
diff changeset
6603 /* 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
6604 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
6605 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
6606 if (maybe_next_line_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6607 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6608 ++best_row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6609 ++best_row_vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6610 lastcol = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6611 current_x = best_row->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6612 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6613
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6614 *vpos = best_row_vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6615 *hpos = lastcol + 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6616 *x = current_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6617 *y = best_row->y;
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6618 return 0;
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6619 }
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6620
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6621
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6622 /* 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
6623 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
6624
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6625 static void
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6626 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
6627 struct x_display_info *dpyinfo;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6628 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
6629 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
6630 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
6631 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
6632 int i;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6633 int cursor_off_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6634 struct cursor_pos saved_cursor;
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 saved_cursor = output_cursor;
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 /* 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
6639 to do anything. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6640 if (w->current_matrix == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6641 goto set_x_cursor;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6642
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6643 /* 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
6644 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
6645 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
6646 goto set_x_cursor;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6647
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6648 set_output_cursor (&w->phys_cursor);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6649
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6650 /* 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
6651 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
6652 i <= dpyinfo->mouse_face_end_row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6653 i++)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6654 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6655 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
6656 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
6657
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6658 /* 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
6659 if (!row->enabled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6660 continue;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6661
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6662 /* 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
6663 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
6664 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6665 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
6666 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
6667 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6668 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6669 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6670 start_hpos = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6671 start_x = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6672 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6673
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6674 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
6675 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
6676 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6677 end_hpos = row->used[TEXT_AREA];
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 /* 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
6680 cursor off. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6681 if (!w->pseudo_window_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6682 && i == output_cursor.vpos
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6683 && output_cursor.hpos >= start_hpos - 1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6684 && output_cursor.hpos <= end_hpos)
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 x_update_window_cursor (w, 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6687 cursor_off_p = 1;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6690 if (end_hpos > start_hpos)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6691 x_draw_glyphs (w, start_x, row, updated_area,
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
6692 start_hpos, end_hpos, draw, NULL, NULL, 0);
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6693 }
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6694
6660
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
6695 /* 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
6696 if (cursor_off_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6697 x_display_cursor (w, 1,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6698 output_cursor.hpos, output_cursor.vpos,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6699 output_cursor.x, output_cursor.y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6700
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6701 output_cursor = saved_cursor;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6702
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6703 set_x_cursor:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6704
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6705 /* Change the mouse cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6706 if (draw == DRAW_NORMAL_TEXT)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6707 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
6708 f->output_data.x->text_cursor);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6709 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
6710 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
6711 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
6712 else
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
6713 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
6714 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
6715 }
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6716
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6717 /* 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
6718 Redraw it un-highlighted first. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6719
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6720 void
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
6721 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
6722 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
6723 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6724 if (tip_frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6725 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6726
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
6727 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
6728 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
6729
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
6730 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
6731 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
6732 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
6733 }
16491
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
6734
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
6735 /* 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
6736 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
6737
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
6738 void
16491
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
6739 cancel_mouse_face (f)
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
6740 FRAME_PTR f;
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
6741 {
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
6742 Lisp_Object window;
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
6743 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
6744
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
6745 window = dpyinfo->mouse_face_window;
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
6746 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
6747 {
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
6748 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
6749 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
6750 dpyinfo->mouse_face_window = Qnil;
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
6751 }
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
6752 }
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
6753
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
6754 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
6755 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
6756
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6757 /* 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
6758 *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
6759
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
6760 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
6761 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
6762 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
6763 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
6764
11436
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
6765 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
6766 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
6767 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
6768
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6769 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
6770 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
6771
3669
fd4187a96445 (XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents: 3639
diff changeset
6772 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
6773
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6774 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
6775 movement. */
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6776
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6777 static void
11122
ce63fb361ae9 (XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents: 11015
diff changeset
6778 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
6779 FRAME_PTR *fp;
11122
ce63fb361ae9 (XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents: 11015
diff changeset
6780 int insist;
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6781 Lisp_Object *bar_window;
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
6782 enum scroll_bar_part *part;
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6783 Lisp_Object *x, *y;
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
6784 unsigned long *time;
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6785 {
3669
fd4187a96445 (XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents: 3639
diff changeset
6786 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
6787
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6788 BLOCK_INPUT;
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6789
20180
bfbf6a2939a3 (XTmouse_position): Handle INSIST < 0.
Karl Heuer <kwzh@gnu.org>
parents: 19447
diff changeset
6790 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
6791 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
6792 else
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6793 {
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6794 Window root;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6795 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
6796
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6797 Window dummy_window;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6798 int dummy;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6799
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
6800 Lisp_Object frame, tail;
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
6801
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
6802 /* 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
6803 FOR_EACH_FRAME (tail, frame)
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
6804 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
6805 XFRAME (frame)->mouse_moved = 0;
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
6806
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
6807 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
6808
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6809 /* 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
6810 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
6811 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
6812
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6813 /* 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
6814 &root,
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6815
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6816 /* 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
6817 a different screen. */
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6818 &dummy_window,
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6819
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6820 /* The position on that root window. */
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
6821 &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
6822
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6823 /* 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
6824 &dummy, &dummy,
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6825
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6826 /* 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
6827 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
6828 (unsigned int *) &dummy);
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6829
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6830 /* 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
6831 containing the pointer. */
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6832 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6833 Window win, child;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6834 int win_x, win_y;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6835 int parent_x = 0, parent_y = 0;
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
6836 int count;
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6837
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6838 win = root;
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6839
11436
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
6840 /* 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
6841 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
6842 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
6843
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
6844 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
6845
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
6846 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
6847 && 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
6848 {
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6849 /* 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
6850 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
6851 XTranslateCoordinates (FRAME_X_DISPLAY (*fp),
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6852
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6853 /* From-window, to-window. */
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6854 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
6855
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6856 /* 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
6857 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
6858
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6859 /* Child of win. */
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6860 &child);
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6861 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
6862 }
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6863 else
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6864 {
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6865 while (1)
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6866 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
6867 XTranslateCoordinates (FRAME_X_DISPLAY (*fp),
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6868
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6869 /* From-window, to-window. */
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6870 root, win,
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6871
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6872 /* From-position, to-position. */
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6873 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
6874
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6875 /* Child of win. */
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6876 &child);
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6877
13627
8873aa3451dd (XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents: 13598
diff changeset
6878 if (child == None || child == win)
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6879 break;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6880
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6881 win = child;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6882 parent_x = win_x;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6883 parent_y = win_y;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6884 }
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6885
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6886 /* Now we know that:
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6887 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
6888 (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
6889 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
6890 (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
6891 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
6892 (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
6893 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
6894 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
6895 never use them in that case.) */
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6896
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
6897 /* 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
6898 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
6899 }
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
6900
11436
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
6901 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
6902 f1 = 0;
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
6903
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
6904 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
6905
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
6906 /* 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
6907 if (! f1)
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6908 {
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
6909 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
6910
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6911 if (bar)
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6912 {
3669
fd4187a96445 (XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents: 3639
diff changeset
6913 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
6914 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
6915 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
6916 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6917 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6918
20180
bfbf6a2939a3 (XTmouse_position): Handle INSIST < 0.
Karl Heuer <kwzh@gnu.org>
parents: 19447
diff changeset
6919 if (f1 == 0 && insist > 0)
11122
ce63fb361ae9 (XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents: 11015
diff changeset
6920 f1 = selected_frame;
ce63fb361ae9 (XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents: 11015
diff changeset
6921
3669
fd4187a96445 (XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents: 3639
diff changeset
6922 if (f1)
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6923 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6924 /* 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
6925 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
6926 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
6927 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
6928 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
6929 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
6930 the frame are divided into. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6931
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6932 #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
6933 int ignore1, ignore2;
a9f61727a90c (construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents: 6023
diff changeset
6934 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
6935 &last_mouse_glyph,
11122
ce63fb361ae9 (XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents: 11015
diff changeset
6936 FRAME_X_DISPLAY_INFO (f1)->grabbed
ce63fb361ae9 (XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents: 11015
diff changeset
6937 || insist);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6938 #else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6939 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6940 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
6941 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
6942 int x = win_x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6943 int y = win_y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6944
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6945 /* 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
6946 round down even for negative values. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6947 if (x < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6948 x -= width - 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6949 if (y < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6950 y -= height - 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6951
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6952 last_mouse_glyph.width = width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6953 last_mouse_glyph.height = height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6954 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
6955 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
6956 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6957 #endif
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6958
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6959 *bar_window = Qnil;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6960 *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
6961 *fp = f1;
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
6962 XSETINT (*x, win_x);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
6963 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
6964 *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
6965 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
6966 }
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6967 }
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6968
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6969 UNBLOCK_INPUT;
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6970 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6971
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6972
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6973 DEFUN ("xt-process-timeouts", Fxt_process_timeouts, Sxt_process_timeouts,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6974 0, 0, 0,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6975 "Arrange for Xt timeout callbacks to be called.")
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6976 ()
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6977 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6978 #ifdef USE_X_TOOLKIT
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6979 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6980 while (XtAppPending (Xt_app_con) & XtIMTimer)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6981 XtAppProcessEvent (Xt_app_con, XtIMTimer);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6982 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6983 #endif /* USE_X_TOOLKIT */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6984
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6985 return Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6986 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6987
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6988
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
6989
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
6990 /* Scroll bar support. */
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
6991
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
6992 /* 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
6993 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
6994 bits. */
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
6995 static struct scroll_bar *
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
6996 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
6997 Window window_id;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
6998 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
6999 Lisp_Object tail;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7000
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7001 for (tail = Vframe_list;
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7002 XGCTYPE (tail) == Lisp_Cons;
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7003 tail = XCONS (tail)->cdr)
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7004 {
6521
a975c5944916 (x_window_to_scroll_bar, x_new_font): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6413
diff changeset
7005 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
7006
a975c5944916 (x_window_to_scroll_bar, x_new_font): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6413
diff changeset
7007 frame = XCONS (tail)->car;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7008 /* 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
7009 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
7010 abort ();
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7011
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7012 /* 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
7013 right window ID. */
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7014 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
7015 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
7016 /* 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
7017 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
7018 ! GC_NILP (bar) || (bar = condemned,
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7019 condemned = Qnil,
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7020 ! 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
7021 bar = XSCROLL_BAR (bar)->next)
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7022 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
7023 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
7024 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7025
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7026 return 0;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7027 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7028
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7029
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 /************************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7032 Toolkit scroll bars
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7033 ************************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7034
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7035 #if USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7036
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7037 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
7038 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
7039 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
7040 struct scroll_bar *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7041 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
7042 int, int, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7043
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7044
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7045 /* 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
7046
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7047 static XtActionHookId action_hook_id;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7048
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7049 /* 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
7050 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
7051
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7052 static Lisp_Object window_being_scrolled;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7053
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7054 /* 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
7055
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7056 static int last_scroll_bar_part;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7059 /* Action hook installed via XtAppAddActionHook when toolkit scroll
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7060 bars are used.. The hoos is responsible for detecting when
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7061 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
7062 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
7063
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7064 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7065 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
7066 num_params)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7067 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7068 XtPointer client_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7069 String action_name;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7070 XEvent *event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7071 String *params;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7072 Cardinal *num_params;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7073 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7074 int scroll_bar_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7075 char *end_action;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7076
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7077 #ifdef USE_MOTIF
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7078 scroll_bar_p = XmIsScrollBar (widget);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7079 end_action = "Release";
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7080 #elif defined HAVE_XAW3D
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7081 scroll_bar_p = XtIsSubclass (widget, scrollbarWidgetClass);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7082 end_action = "EndScroll";
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7083 #else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7084 #error unknown scroll bar toolkit
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7085 #endif /* HAVE_XAW3D */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7086
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7087 /* Although LessTif uses XtTimeouts like Xaw3d, the timer hack to
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7088 let Xt timeouts be processed doesn't work. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7089 if (scroll_bar_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7090 && strcmp (action_name, end_action) == 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7091 && WINDOWP (window_being_scrolled))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7092 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7093 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7094
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7095 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
7096 scroll_bar_end_scroll, 0, 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7097 w = XWINDOW (window_being_scrolled);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7098 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
7099 window_being_scrolled = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7100 last_scroll_bar_part = -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7101 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7102 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7103
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7104
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7105 /* 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
7106 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
7107 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
7108 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
7109
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7110 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7111 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
7112 Lisp_Object window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7113 int part, portion, whole;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7114 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7115 XEvent event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7116 XClientMessageEvent *ev = (XClientMessageEvent *) &event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7117 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
7118
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7119 /* 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
7120 ev->type = ClientMessage;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7121 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
7122 ev->display = FRAME_X_DISPLAY (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7123 ev->window = FRAME_X_WINDOW (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7124 ev->format = 32;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7125 ev->data.l[0] = (long) window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7126 ev->data.l[1] = (long) part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7127 ev->data.l[2] = (long) 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7128 ev->data.l[3] = (long) portion;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7129 ev->data.l[4] = (long) whole;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7130
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7131 /* 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
7132 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
7133 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
7134 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7135 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
7136 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7137 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7138
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7139
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7140 /* 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
7141 in *IEVENT. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7142
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7143 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7144 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
7145 XEvent *event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7146 struct input_event *ievent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7147 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7148 XClientMessageEvent *ev = (XClientMessageEvent *) event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7149 Lisp_Object window = (Lisp_Object) ev->data.l[0];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7150 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
7151
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7152 ievent->kind = scroll_bar_click;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7153 ievent->frame_or_window = window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7154 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
7155 ievent->part = ev->data.l[1];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7156 ievent->code = ev->data.l[2];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7157 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
7158 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
7159 ievent->modifiers = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7160 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7161
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7162
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7163 #ifdef USE_MOTIF
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7164
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7165 /* 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
7166
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7167 #define XM_SB_MIN 1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7168 #define XM_SB_MAX 10000000
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7169 #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
7170
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7171
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7172 /* 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
7173 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
7174 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
7175
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7176 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7177 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
7178 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7179 XtPointer client_data, call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7180 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7181 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
7182 XmScrollBarCallbackStruct *cs = (XmScrollBarCallbackStruct *) call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7183 double percent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7184 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
7185
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7186 switch (cs->reason)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7187 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7188 case XmCR_DECREMENT:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7189 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7190 part = scroll_bar_up_arrow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7191 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7192
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7193 case XmCR_INCREMENT:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7194 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7195 part = scroll_bar_down_arrow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7196 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7197
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7198 case XmCR_PAGE_DECREMENT:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7199 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7200 part = scroll_bar_above_handle;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7201 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7202
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7203 case XmCR_PAGE_INCREMENT:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7204 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7205 part = scroll_bar_below_handle;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7206 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7207
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7208 case XmCR_TO_TOP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7209 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7210 part = scroll_bar_to_top;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7211 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7212
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7213 case XmCR_TO_BOTTOM:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7214 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7215 part = scroll_bar_to_bottom;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7216 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7217
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7218 case XmCR_DRAG:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7219 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7220 int slider_size;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7221 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
7222 && XINT (bar->dragging) <= cs->value);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7223
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7224 /* Get the slider size. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7225 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7226 XtVaGetValues (widget, XmNsliderSize, &slider_size, NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7227 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7228
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7229 /* 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
7230 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
7231 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
7232 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
7233 we have to do something.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7234
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7235 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
7236 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
7237 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
7238 a better slider behavior. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7239
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7240 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
7241 || (dragging_down_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7242 && 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
7243 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7244 part = scroll_bar_down_arrow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7245 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7246 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7247 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7248 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7249 whole = XM_SB_RANGE;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7250 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
7251 part = scroll_bar_handle;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7252 bar->dragging = make_number (cs->value);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7253 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7254 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7255 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7256
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7257 case XmCR_VALUE_CHANGED:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7258 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7259 };
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7260
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7261 if (part >= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7262 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7263 window_being_scrolled = bar->window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7264 last_scroll_bar_part = part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7265 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
7266 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7267 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7268
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7269
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7270 #else /* not USE_MOTIF, i.e. XAW3D. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7271
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7272
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7273 /* Xaw3d scroll bar callback. Invoked when the thumb is dragged.
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7274 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
7275 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
7276 the thumb is. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7277
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7278 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7279 xaw3d_jump_callback (widget, client_data, call_data)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7280 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7281 XtPointer client_data, call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7282 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7283 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
7284 float top = *(float *) call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7285 float shown;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7286 int whole, portion;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7287 int dragging_down_p, part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7288 double epsilon = 0.01;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7289
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7290 /* 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
7291 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7292 XtVaGetValues (widget, XtNshown, &shown, NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7293 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7294
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7295 whole = 10000000;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7296 portion = shown < 1 ? top * whole : 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7297 dragging_down_p = (INTEGERP (bar->dragging)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7298 && XINT (bar->dragging) < portion);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7299
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7300 if (shown < 1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7301 && (abs (top + shown - 1) < epsilon
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7302 || (dragging_down_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7303 && 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
7304 part = scroll_bar_down_arrow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7305 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7306 part = scroll_bar_handle;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7307
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7308 window_being_scrolled = bar->window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7309 bar->dragging = make_number (portion);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7310 last_scroll_bar_part = part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7311 x_send_scroll_bar_event (bar->window, part, portion, whole);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7312 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7313
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7314
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7315 /* Xaw3d scroll bar callback. Invoked for incremental scrolling.,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7316 i.e. line or page up or down. WIDGET is the Xaw3d scroll bar
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7317 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
7318 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
7319 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
7320 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
7321 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
7322
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7323 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7324 xaw3d_scroll_callback (widget, client_data, call_data)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7325 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7326 XtPointer client_data, call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7327 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7328 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
7329 int position = (int) call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7330 Dimension height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7331 int part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7332
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7333 /* 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
7334 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7335 XtVaGetValues (widget, XtNheight, &height, NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7336 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7337
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7338 if (position < 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7339 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7340 if (abs (position) < height)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7341 part = scroll_bar_up_arrow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7342 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7343 part = scroll_bar_above_handle;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7344 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7345 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7346 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7347 if (abs (position) < height)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7348 part = scroll_bar_down_arrow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7349 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7350 part = scroll_bar_below_handle;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7351 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7352
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7353 window_being_scrolled = bar->window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7354 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7355 last_scroll_bar_part = part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7356 x_send_scroll_bar_event (bar->window, part, 0, 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7357 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7358
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7359
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7360 #endif /* not USE_MOTIF */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7361
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7362
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7363 /* 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
7364 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
7365
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7366 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7367 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
7368 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7369 struct scroll_bar *bar;
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 Window xwindow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7372 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7373 Arg av[20];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7374 int ac = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7375 char *scroll_bar_name = "verticalScrollBar";
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7376 unsigned long pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7377
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7378 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7379
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7380 #ifdef USE_MOTIF
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7381 /* LessTif 0.85, problems:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7382
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7383 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
7384 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
7385
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7386 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
7387 cursor (see below)? */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7388
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7389 /* Set resources. Create the widget. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7390 XtSetArg (av[ac], XtNmappedWhenManaged, False); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7391 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
7392 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
7393 XtSetArg (av[ac], XmNorientation, XmVERTICAL); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7394 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
7395 XtSetArg (av[ac], XmNincrement, 1); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7396 XtSetArg (av[ac], XmNpageIncrement, 1); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7397
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7398 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
7399 if (pixel != -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7400 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7401 XtSetArg (av[ac], XmNforeground, pixel);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7402 ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7403 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7404
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7405 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
7406 if (pixel != -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7407 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7408 XtSetArg (av[ac], XmNbackground, pixel);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7409 ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7410 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7411
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7412 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
7413 scroll_bar_name, av, ac);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7414
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7415 /* 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
7416 XtAddCallback (widget, XmNdecrementCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7417 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7418 XtAddCallback (widget, XmNdragCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7419 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7420 XtAddCallback (widget, XmNincrementCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7421 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7422 XtAddCallback (widget, XmNpageDecrementCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7423 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7424 XtAddCallback (widget, XmNpageIncrementCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7425 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7426 XtAddCallback (widget, XmNtoBottomCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7427 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7428 XtAddCallback (widget, XmNtoTopCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7429 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7430
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7431 /* 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
7432 XtRealizeWidget (widget);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7433
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7434 /* 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
7435 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
7436 XDefineCursor (XtDisplay (widget), XtWindow (widget),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7437 f->output_data.x->nontext_cursor);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7438
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7439 #elif defined HAVE_XAW3D
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7440
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7441 /* 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
7442 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
7443 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
7444 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
7445 XtSetArg (av[ac], XtNmappedWhenManaged, False); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7446 XtSetArg (av[ac], XtNorientation, XtorientVertical); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7447 XtSetArg (av[ac], XtNcursorName, "left_ptr"); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7448 XtSetArg (av[ac], XtNbeNiceToColormap, True); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7449
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7450 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
7451 if (pixel != -1)
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 XtSetArg (av[ac], XtNforeground, pixel);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7454 ++ac;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7457 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
7458 if (pixel != -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7459 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7460 XtSetArg (av[ac], XtNbackground, pixel);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7461 ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7462 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7463
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7464 widget = XtCreateWidget (scroll_bar_name, scrollbarWidgetClass,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7465 f->output_data.x->edit_widget, av, ac);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7466
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7467 /* Define callbacks. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7468 XtAddCallback (widget, XtNjumpProc, xaw3d_jump_callback, (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7469 XtAddCallback (widget, XtNscrollProc, xaw3d_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7470 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7471
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7472 /* 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
7473 XtRealizeWidget (widget);
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 #endif /* HAVE_XAW3D */
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 /* 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
7478 finishes interacting with a scroll bar. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7479 if (action_hook_id == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7480 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
7481
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7482 /* 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
7483 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
7484 xwindow = XtWindow (widget);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7485 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
7486
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7487 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7488 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7489
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7490
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7491 /* 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
7492 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
7493
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7494 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7495 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
7496 struct scroll_bar *bar;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7497 int portion, position, whole;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7498 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7499 float top, shown;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7500 Arg av[2];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7501 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
7502
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7503 if (whole == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7504 top = 0, shown = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7505 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7506 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7507 top = (float) position / whole;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7508 shown = (float) portion / whole;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7509 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7510
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7511 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7512
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7513 #ifdef USE_MOTIF
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7514 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7515 int size, value;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7516 Boolean arrow1_selected, arrow2_selected;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7517 unsigned char flags;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7518 XmScrollBarWidget sb;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7519
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7520 /* Slider size. Must be in the range [1 .. MAX - MIN] where NAX
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7521 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
7522 value. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7523 size = shown * XM_SB_RANGE;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7524 size = min (size, XM_SB_RANGE);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7525 size = max (size, 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7526
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7527 /* 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
7528 value = top * XM_SB_RANGE;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7529 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
7530 value = max (value, XM_SB_MIN);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7531
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7532 /* 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
7533 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
7534 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
7535 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
7536 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
7537 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
7538
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7539 sb = (XmScrollBarWidget) widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7540 arrow1_selected = sb->scrollBar.arrow1_selected;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7541 arrow2_selected = sb->scrollBar.arrow2_selected;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7542 flags = sb->scrollBar.flags;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7543
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7544 if (NILP (bar->dragging))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7545 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
7546 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
7547 /* This has the negative side effect that the slider value is
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7548 not would it would be if we scrolled here using line-wise or
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7549 page-wise movement. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7550 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
7551 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7552 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7553 /* 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
7554 This reduces flicker effects. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7555 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
7556
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7557 XmScrollBarGetValues (widget, &old_value, &old_size,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7558 &increment, &page_increment);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7559 XmScrollBarSetValues (widget, old_value,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7560 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
7561 0, 0, False);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7562 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7563
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7564 sb->scrollBar.arrow1_selected = arrow1_selected;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7565 sb->scrollBar.arrow2_selected = arrow2_selected;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7566 sb->scrollBar.flags = flags;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7567 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7568 #elif defined HAVE_XAW3D
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7569 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7570 /* Restrict to [0 1]. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7571 top = max (0, min (1, top));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7572 shown = max (0, min (1, shown));
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 /* 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
7575 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
7576 for `NARROWPROTO'. See s/freebsd.h for an example. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7577 if (NILP (bar->dragging))
25101
6b42357f28f9 (x_set_toolkit_scroll_bar_thumb): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents: 25091
diff changeset
7578 {
6b42357f28f9 (x_set_toolkit_scroll_bar_thumb): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents: 25091
diff changeset
7579 float old_top, old_shown;
6b42357f28f9 (x_set_toolkit_scroll_bar_thumb): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents: 25091
diff changeset
7580 XtVaGetValues (widget, XtNtopOfThumb, &old_top, XtNshown, &old_shown,
6b42357f28f9 (x_set_toolkit_scroll_bar_thumb): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents: 25091
diff changeset
7581 NULL);
6b42357f28f9 (x_set_toolkit_scroll_bar_thumb): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents: 25091
diff changeset
7582 if (top != old_top || shown != old_shown)
6b42357f28f9 (x_set_toolkit_scroll_bar_thumb): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents: 25091
diff changeset
7583 XawScrollbarSetThumb (widget, top, shown);
6b42357f28f9 (x_set_toolkit_scroll_bar_thumb): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents: 25091
diff changeset
7584 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7585 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7586 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7587 ScrollbarWidget sb = (ScrollbarWidget) widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7588 int scroll_mode = sb->scrollbar.scroll_mode;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7589
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7590 sb->scrollbar.scroll_mode = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7591
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7592 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
7593 XawScrollbarSetThumb (widget, top, 1 - top);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7594 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7595 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7596 float old_top;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7597 XtVaGetValues (widget, XtNtopOfThumb, &old_top, NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7598 XawScrollbarSetThumb (widget, old_top, min (shown, 1 - old_top));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
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 sb->scrollbar.scroll_mode = scroll_mode;
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 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7604 #endif /* HAVE_XAW3D */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7605
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7606 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7607 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7608
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7609 #endif /* USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7610
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7611
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7612
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 Scroll bars, general
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7615 ************************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7616
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7617 /* 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
7618 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
7619 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
7620 scroll bar. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7621
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7622 static struct scroll_bar *
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7623 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
7624 struct window *w;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7625 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
7626 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7627 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7628 #ifdef USE_X_TOOLKIT
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7629 Arg av[10];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7630 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7631 int ac = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7632 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
7633 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
7634 = 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
7635
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7636 BLOCK_INPUT;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7637
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7638 #if USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7639 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
7640 #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
7641 {
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7642 XSetWindowAttributes a;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7643 unsigned long mask;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7644
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7645 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
7646 if (a.background_pixel == -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7647 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
7648
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7649 a.event_mask = (ButtonPressMask | ButtonReleaseMask
1793
cf4c3f01ddb9 * xterm.c (x_scrollbar_create): Include PointerMotionHintMask in
Jim Blandy <jimb@redhat.com>
parents: 1787
diff changeset
7650 | ButtonMotionMask | PointerMotionHintMask
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7651 | ExposureMask);
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7652 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
7653
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
7654 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
7655
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7656 /* 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
7657 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
7658 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
7659 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
7660 left, top, width,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7661 window_box_height (w), False);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7662
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7663 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
7664 /* Position and size of scroll bar. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7665 left + VERTICAL_SCROLL_BAR_WIDTH_TRIM,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7666 top,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7667 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
7668 height,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7669 /* Border width, depth, class, and visual. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7670 0,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7671 CopyFromParent,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7672 CopyFromParent,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7673 CopyFromParent,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7674 /* Attributes. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7675 mask, &a);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7676 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
7677 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7678 #endif /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7679
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7680 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
7681 XSETINT (bar->top, top);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
7682 XSETINT (bar->left, left);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
7683 XSETINT (bar->width, width);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
7684 XSETINT (bar->height, height);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
7685 XSETINT (bar->start, 0);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
7686 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
7687 bar->dragging = Qnil;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7688
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7689 /* 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
7690 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
7691 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
7692 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
7693 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
7694 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
7695
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7696 /* Map the window/widget. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7697 #if USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7698 XtMapWidget (SCROLL_BAR_X_WIDGET (bar));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7699 XtConfigureWidget (SCROLL_BAR_X_WIDGET (bar),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7700 left + VERTICAL_SCROLL_BAR_WIDTH_TRIM,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7701 top,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7702 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
7703 height, 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7704 #else /* not USE_TOOLKIT_SCROLL_BARS */
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
7705 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
7706 #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
7707
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7708 UNBLOCK_INPUT;
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7709 return bar;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7710 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7711
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7712
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7713 /* 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
7714
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7715 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
7716 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
7717 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
7718 events.)
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7719
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7720 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
7721 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
7722 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
7723 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
7724 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
7725
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7726 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7727 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
7728 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
7729 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
7730 int rebuild;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7731 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7732 #ifndef USE_TOOLKIT_SCROLL_BARS
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7733 int dragging = ! NILP (bar->dragging);
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7734 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
7735 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
7736 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
7737
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7738 /* 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
7739 if (! rebuild
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7740 && 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
7741 && 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
7742 return;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7743
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7744 BLOCK_INPUT;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7745
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7746 {
16251
ec1b1ae37295 Pass frame arg in calls to VERTICAL_SCROLL_BAR_INSIDE_HEIGHT
Richard M. Stallman <rms@gnu.org>
parents: 16220
diff changeset
7747 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
7748 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
7749 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
7750
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7751 /* 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
7752 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
7753 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7754 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
7755
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7756 if (start < 0)
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7757 start = 0;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7758 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
7759 start = top_range;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7760 end = start + length;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7761
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7762 if (end < start)
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7763 end = start;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7764 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
7765 end = top_range;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7766 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7767
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7768 /* 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
7769 XSETINT (bar->start, start);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
7770 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
7771
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7772 /* 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
7773 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
7774 end = top_range;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7775
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7776 /* 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
7777 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
7778 that many pixels tall. */
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7779 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
7780
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7781 /* 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
7782 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
7783 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
7784 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
7785
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7786 /* 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
7787 VERTICAL_SCROLL_BAR_LEFT_BORDER,
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7788 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
7789 inside_width, start,
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7790 False);
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7791
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7792 /* 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
7793 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
7794 XSetForeground (FRAME_X_DISPLAY (f), gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7795 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
7796
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7797 /* 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
7798 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
7799
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7800 /* x, y, width, height */
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7801 VERTICAL_SCROLL_BAR_LEFT_BORDER,
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7802 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
7803 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
7804
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7805 /* 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
7806 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
7807 XSetForeground (FRAME_X_DISPLAY (f), gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7808 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
7809
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7810 /* 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
7811 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
7812 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
7813 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
7814
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7815 /* 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
7816 VERTICAL_SCROLL_BAR_LEFT_BORDER,
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7817 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
7818 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
7819 False);
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7820
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7821 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7822
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7823 UNBLOCK_INPUT;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7824 #endif /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7825 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7826
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7827
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7828 /* 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
7829 nil. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7830
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7831 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7832 x_scroll_bar_remove (bar)
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7833 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
7834 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7835 FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window)));
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7836
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7837 BLOCK_INPUT;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7838
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7839 #if USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7840 XtDestroyWidget (SCROLL_BAR_X_WIDGET (bar));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7841 #else /* not USE_TOOLKIT_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
7842 XDestroyWindow (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
7843 #endif /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7844
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7845 /* 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
7846 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
7847
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7848 UNBLOCK_INPUT;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7849 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7850
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7851
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7852 /* 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
7853 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
7854 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
7855 create one. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7856
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7857 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7858 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
7859 struct window *w;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7860 int portion, whole, position;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7861 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7862 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
7863 struct scroll_bar *bar;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7864 int pixel_top, pixel_left, pixel_width, pixel_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7865 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
7866 int scroll_bar_area_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7867
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7868 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
7869
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7870 /* Where should this scroll bar be, pixel-wise? */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7871 pixel_top = window_y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7872 pixel_height = window_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7873
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7874 /* The width of the scroll bar itself. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7875 pixel_width = (FRAME_SCROLL_BAR_PIXEL_WIDTH (f) > 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7876 ? FRAME_SCROLL_BAR_PIXEL_WIDTH (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7877 : (FRAME_SCROLL_BAR_COLS (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7878 * FONT_WIDTH (FRAME_FONT (f))));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7879
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7880 /* The width on the screen reserved for the scroll bar plus maybe
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7881 some empty room at both sides of the scroll bar. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7882 scroll_bar_area_width = FRAME_SCROLL_BAR_COLS (f) * CANON_X_UNIT (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7883
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7884 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
7885 pixel_left = (window_x
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7886 + window_width
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7887 + FRAME_FLAGS_AREA_WIDTH (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7888 + scroll_bar_area_width
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7889 - pixel_width + 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7890 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7891 pixel_left = (window_x
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7892 - FRAME_FLAGS_AREA_WIDTH (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7893 - scroll_bar_area_width);
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7894
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
7895 /* 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
7896 if (NILP (w->vertical_scroll_bar))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7897 bar = x_scroll_bar_create (w, pixel_top, pixel_left, pixel_width,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7898 pixel_height);
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7899 else
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7900 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
7901 /* 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
7902 unsigned int mask = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7903
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7904 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
7905
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7906 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7907
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7908 if (pixel_left != XINT (bar->left))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7909 mask |= CWX;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7910 if (pixel_top != XINT (bar->top))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7911 mask |= CWY;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7912 if (pixel_width != XINT (bar->width))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7913 mask |= CWWidth;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7914 if (pixel_height != XINT (bar->height))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7915 mask |= CWHeight;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7916
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7917 #ifdef USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7918
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7919 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
7920 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7921 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
7922 pixel_left + pixel_width - scroll_bar_area_width,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7923 pixel_top,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7924 (scroll_bar_area_width
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7925 - pixel_width
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7926 + VERTICAL_SCROLL_BAR_WIDTH_TRIM),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7927 pixel_height, False);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7928 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
7929 (pixel_left
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7930 + pixel_width
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7931 - VERTICAL_SCROLL_BAR_WIDTH_TRIM),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7932 pixel_top,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7933 VERTICAL_SCROLL_BAR_WIDTH_TRIM,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7934 pixel_height, False);
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 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7937 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7938 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
7939 pixel_left, pixel_top,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7940 VERTICAL_SCROLL_BAR_WIDTH_TRIM, pixel_height, False);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7941 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
7942 (pixel_left
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7943 + pixel_width
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7944 - VERTICAL_SCROLL_BAR_WIDTH_TRIM),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7945 pixel_top,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7946 (scroll_bar_area_width
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7947 - pixel_width
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7948 + VERTICAL_SCROLL_BAR_WIDTH_TRIM),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7949 pixel_height, False);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7950 }
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 /* Move/size the scroll bar widget. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7953 if (mask)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7954 XtConfigureWidget (SCROLL_BAR_X_WIDGET (bar),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7955 pixel_left + VERTICAL_SCROLL_BAR_WIDTH_TRIM,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7956 pixel_top,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7957 pixel_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
7958 pixel_height, 0);
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 #else /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7961
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7962 /* Clear areas not covered by the scroll bar. This makes sure a
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7963 previous mode line display is cleared after C-x 2 C-x 1, for
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7964 example. Non-toolkit scroll bars are as wide as the area
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7965 reserved for scroll bars - trim at both sides. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7966 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
7967 pixel_left, pixel_top, VERTICAL_SCROLL_BAR_WIDTH_TRIM,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7968 pixel_height, False);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7969 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
7970 (pixel_left
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7971 + pixel_width
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7972 - VERTICAL_SCROLL_BAR_WIDTH_TRIM),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7973 pixel_top,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7974 VERTICAL_SCROLL_BAR_WIDTH_TRIM,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7975 pixel_height, False);
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 /* Move/size the scroll bar window. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7978 if (mask)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7979 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7980 XWindowChanges wc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7981
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7982 wc.x = pixel_left + VERTICAL_SCROLL_BAR_WIDTH_TRIM;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7983 wc.y = pixel_top;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7984 wc.width = pixel_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
7985 wc.height = pixel_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7986 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
7987 mask, &wc);
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7990 #endif /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7992 /* Remember new settings. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7993 XSETINT (bar->left, pixel_left);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7994 XSETINT (bar->top, pixel_top);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7995 XSETINT (bar->width, pixel_width);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7996 XSETINT (bar->height, pixel_height);
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 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7999 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8000
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8001 #if USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8002 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
8003 #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
8004 /* 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
8005 dragged. */
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8006 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
8007 {
16251
ec1b1ae37295 Pass frame arg in calls to VERTICAL_SCROLL_BAR_INSIDE_HEIGHT
Richard M. Stallman <rms@gnu.org>
parents: 16220
diff changeset
8008 int top_range = VERTICAL_SCROLL_BAR_TOP_RANGE (f, pixel_height);
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8009
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8010 if (whole == 0)
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8011 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
8012 else
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8013 {
3686
910ea1d66bfd * xterm.c (XTset_vertical_scroll_bar): Use double type for
Jim Blandy <jimb@redhat.com>
parents: 3683
diff changeset
8014 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
8015 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
8016 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
8017 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8018 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8019 #endif /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8020
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8021 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
8022 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8023
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8024
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8025 /* 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
8026 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
8027 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
8028 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
8029 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
8030 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
8031 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
8032
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8033 /* 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
8034 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
8035 `*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
8036
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
8037 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8038 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
8039 FRAME_PTR frame;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8040 {
13205
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
8041 /* 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
8042 while (! NILP (FRAME_SCROLL_BARS (frame)))
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
8043 {
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
8044 Lisp_Object bar;
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
8045 bar = FRAME_SCROLL_BARS (frame);
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
8046 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
8047 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
8048 XSCROLL_BAR (bar)->prev = Qnil;
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
8049 if (! NILP (FRAME_CONDEMNED_SCROLL_BARS (frame)))
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
8050 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
8051 FRAME_CONDEMNED_SCROLL_BARS (frame) = bar;
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
8052 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8053 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8054
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8055 /* 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
8056 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
8057 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8058 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
8059 struct window *window;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8060 {
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8061 struct scroll_bar *bar;
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8062
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8063 /* 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
8064 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
8065 abort ();
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8066
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8067 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
8068
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8069 /* 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
8070 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8071 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
8072
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8073 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
8074 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8075 /* 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
8076 the lists. */
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8077 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
8078 /* 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
8079 return;
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8080 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
8081 window->vertical_scroll_bar))
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8082 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
8083 else
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8084 /* 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
8085 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
8086 abort ();
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8087 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8088 else
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8089 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
8090
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8091 if (! NILP (bar->next))
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8092 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
8093
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8094 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
8095 bar->prev = Qnil;
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8096 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
8097 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
8098 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
8099 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8100 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8101
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8102 /* 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
8103 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
8104
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8105 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8106 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
8107 FRAME_PTR f;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8108 {
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8109 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
8110
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8111 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
8112
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
8113 /* 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
8114 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
8115 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
8116
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
8117 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
8118 {
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8119 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
8120
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8121 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
8122
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8123 next = b->next;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8124 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
8125 }
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8126
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8127 /* 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
8128 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
8129 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8130
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8131
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8132 /* 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
8133 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
8134
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8135 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
8136 mark bits. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8137
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8138 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8139 x_scroll_bar_expose (bar, event)
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8140 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
8141 XEvent *event;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8142 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8143 #ifndef USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8144
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8145 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
8146 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
8147 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
8148 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
8149
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8150 BLOCK_INPUT;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8151
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8152 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
8153
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8154 /* 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
8155 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
8156
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8157 /* 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
8158 0, 0,
16301
a02555b4b2b9 (x_scroll_bar_create, x_scroll_bar_move):
Richard M. Stallman <rms@gnu.org>
parents: 16251
diff changeset
8159 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
8160 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
8161
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8162 UNBLOCK_INPUT;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8163
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8164 #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
8165 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8166
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8167 /* 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
8168 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
8169
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8170 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
8171 mark bits. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8172
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8173 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8174 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
8175 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
8176 XEvent *event;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8177 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
8178 {
10287
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
8179 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
8180 abort ();
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8181
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8182 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
8183 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
8184 emacs_event->modifiers
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
8185 = (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
8186 (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
8187 event->xbutton.state)
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
8188 | (event->type == ButtonRelease
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
8189 ? up_modifier
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
8190 : down_modifier));
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8191 emacs_event->frame_or_window = bar->window;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8192 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
8193 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8194 #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
8195 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
8196 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
8197 = 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
8198 #endif
10287
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
8199 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
8200 = 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
8201 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
8202
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8203 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
8204 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
8205
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8206 if (y < XINT (bar->start))
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8207 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
8208 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
8209 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
8210 else
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8211 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
8212
5440f00480e6 * xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents: 2923
diff changeset
8213 /* 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
8214 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
8215 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
8216 #if 0
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8217 /* 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
8218 holding it. */
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8219 if (event->type == ButtonPress
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8220 && 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
8221 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
8222 #endif
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8223
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8224 /* 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
8225 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
8226 && ! NILP (bar->dragging))
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8227 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8228 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
8229 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
8230
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8231 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
8232 bar->dragging = Qnil;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8233 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8234
2958
3124e6244d1a * xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents: 2953
diff changeset
8235 /* 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
8236 #if 0
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
8237 /* 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
8238 the handle. */
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8239 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
8240 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
8241 else
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8242 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
8243 #else
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8244 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
8245 #endif
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8246
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8247 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
8248 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8249 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8250
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8251 /* 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
8252
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8253 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
8254 mark bits. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8255
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8256 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8257 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
8258 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
8259 XEvent *event;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8260 {
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
8261 FRAME_PTR f = XFRAME (XWINDOW (bar->window)->frame);
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
8262
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8263 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
8264
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
8265 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
8266 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
8267
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8268 /* 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
8269 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
8270 {
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8271 /* 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
8272 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
8273
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8274 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
8275 {
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8276 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
8277
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8278 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
8279 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8280 }
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
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8283 /* 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
8284 on the scroll bar. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8285
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8286 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
8287 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
8288 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
8289 Lisp_Object *bar_window;
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8290 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
8291 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
8292 unsigned long *time;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8293 {
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8294 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
8295 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
8296 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
8297 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
8298 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
8299 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
8300 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
8301
1803
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
8302 BLOCK_INPUT;
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
8303
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8304 /* 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
8305 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
8306 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
8307
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
8308 /* 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
8309 &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
8310 &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
8311
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
8312 /* 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
8313 &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
8314
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
8315 /* 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
8316 &dummy_mask))
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8317 ;
2982
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
8318 else
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
8319 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8320 #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
8321 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
8322 = 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
8323 #endif
2982
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
8324 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
8325 = 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
8326
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
8327 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
8328
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
8329 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
8330 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
8331
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
8332 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
8333 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
8334 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
8335 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
8336
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
8337 *fp = f;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8338 *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
8339
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
8340 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
8341 *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
8342 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
8343 *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
8344 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
8345 *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
8346 else
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
8347 *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
8348
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8349 XSETINT (*x, win_y);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8350 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
8351
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
8352 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
8353 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
8354 }
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
8355
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
8356 *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
8357
1803
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
8358 UNBLOCK_INPUT;
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8359 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
8360
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8361
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8362 /* 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
8363 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
8364 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
8365 redraw them. */
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8366
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
8367 void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
8368 x_scroll_bar_clear (f)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8369 FRAME_PTR f;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8370 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8371 #ifndef USE_TOOLKIT_SCROLL_BARS
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8372 Lisp_Object bar;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8373
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
8374 /* 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
8375 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
8376 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
8377 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
8378 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
8379 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
8380 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
8381 0, 0, 0, 0, True);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8382 #endif /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8383 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8384
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8385 /* 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
8386 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
8387 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
8388
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8389 int
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8390 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
8391 XEvent event;
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8392 {
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8393 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
8394 struct x_display_info *dpyinfo;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8395 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
8396
5872
6389c826f847 (x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents: 5825
diff changeset
8397 BLOCK_INPUT;
6389c826f847 (x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents: 5825
diff changeset
8398
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
8399 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
8400 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
8401 if (f)
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8402 {
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8403 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
8404 {
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8405 f->async_visible = 1;
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8406 f->async_iconified = 0;
18074
06e42aa4c208 (process_expose_from_menu, XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 18057
diff changeset
8407 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
8408 SET_FRAME_GARBAGED (f);
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8409 }
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8410 else
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8411 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8412 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
8413 event.xexpose.x, event.xexpose.y,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8414 event.xexpose.width, event.xexpose.height);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8415 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
8416 }
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8417 }
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8418 else
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8419 {
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8420 struct scroll_bar *bar
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8421 = x_window_to_scroll_bar (event.xexpose.window);
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
8422
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8423 if (bar)
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8424 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
8425 }
5872
6389c826f847 (x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents: 5825
diff changeset
8426
6389c826f847 (x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents: 5825
diff changeset
8427 UNBLOCK_INPUT;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8428 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
8429 }
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8430
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8431 /* 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
8432
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8433 struct selection_event_queue
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8434 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8435 XEvent event;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8436 struct selection_event_queue *next;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8437 };
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8438
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8439 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
8440
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8441 /* 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
8442
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8443 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
8444
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8445 /* 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
8446
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8447 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
8448 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
8449 FRAME_PTR f;
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8450 XEvent *event;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8451 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8452 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
8453 = (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
8454
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
8455 if (queue_tmp != NULL)
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8456 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8457 queue_tmp->event = *event;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8458 queue_tmp->next = queue;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8459 queue = queue_tmp;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8460 }
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8461 }
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8462
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8463 /* 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
8464 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
8465
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8466 static void
10634
de7beeb9f02c (x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents: 10609
diff changeset
8467 x_unqueue_events (display)
de7beeb9f02c (x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents: 10609
diff changeset
8468 Display *display;
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8469 {
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
8470 while (queue != NULL)
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8471 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8472 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
8473 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
8474 queue = queue_tmp->next;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8475 xfree ((char *)queue_tmp);
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8476 }
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8477 }
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8478
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8479 /* Start queuing SelectionRequest events. */
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8480
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8481 void
10634
de7beeb9f02c (x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents: 10609
diff changeset
8482 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
8483 Display *display;
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8484 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8485 x_queue_selection_requests++;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8486 }
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8487
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8488 /* Stop queuing SelectionRequest events. */
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8489
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8490 void
10634
de7beeb9f02c (x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents: 10609
diff changeset
8491 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
8492 Display *display;
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8493 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
8494 x_queue_selection_requests--;
10634
de7beeb9f02c (x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents: 10609
diff changeset
8495 x_unqueue_events (display);
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
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 /* The main X event-reading loop - XTread_socket. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8499
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8500 /* 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
8501 but we have to put it out here, since static variables within functions
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8502 sometimes don't work. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8503
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8504 static Time enter_timestamp;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8505
1436
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
8506 /* 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
8507 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
8508 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
8509 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
8510
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
8511 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
8512 given for enter_time stamp, above. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8513
1436
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
8514 static XComposeStatus compose_status;
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
8515
2064
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
8516 /* Record the last 100 characters stored
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
8517 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
8518
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
8519 static int temp_index;
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
8520 static short temp_buffer[100];
2064
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
8521
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8522 /* 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
8523 on a particular display. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8524
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8525 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
8526
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
8527 /* 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
8528 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
8529 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
8530 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
8531
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
8532 static struct x_display_info *next_noop_dpyinfo;
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
8533
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8534 #define SET_SAVED_MENU_EVENT(size) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8535 do \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8536 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8537 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
8538 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
8539 = (XEvent *) xmalloc (sizeof (XEvent)); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8540 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
8541 if (numchars >= 1) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8542 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8543 bufp->kind = menu_bar_activate_event; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8544 XSETFRAME (bufp->frame_or_window, f); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8545 bufp++; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8546 count++; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8547 numchars--; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8548 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8549 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8550 while (0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8551
15711
099dc465c948 (SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents: 15639
diff changeset
8552 #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
8553 #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
8554
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8555 /* Read events coming from the X server.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8556 This routine is called by the SIGIO handler.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8557 We return as soon as there are no more events to be read.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8558
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8559 Events representing keys are stored in buffer BUFP,
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8560 which can hold up to NUMCHARS characters.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8561 We return the number of characters stored into the buffer,
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8562 thus pretending to be `read'.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8563
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8564 EXPECTED is nonzero if the caller knows input is available. */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8565
1530
a7f8a1fe258e * xterm.c (x_convert_modifiers): Declare this to return an
Jim Blandy <jimb@redhat.com>
parents: 1436
diff changeset
8566 int
16330
e4d9d77012bc (XTread_socket): Delete WAITP arg.
Richard M. Stallman <rms@gnu.org>
parents: 16301
diff changeset
8567 XTread_socket (sd, bufp, numchars, expected)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8568 register int sd;
15711
099dc465c948 (SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents: 15639
diff changeset
8569 /* register */ struct input_event *bufp;
099dc465c948 (SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents: 15639
diff changeset
8570 /* register */ int numchars;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8571 int expected;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8572 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8573 int count = 0;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8574 int nbytes = 0;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8575 XEvent event;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8576 struct frame *f;
3938
83d870a52936 * xterm.c (XTread_socket): Initialize event_found to zero, and
Jim Blandy <jimb@redhat.com>
parents: 3924
diff changeset
8577 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
8578 struct x_display_info *dpyinfo;
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
8579 #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
8580 Status status_return;
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
8581 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8582
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2353
diff changeset
8583 if (interrupt_input_blocked)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8584 {
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2353
diff changeset
8585 interrupt_input_pending = 1;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8586 return -1;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8587 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8588
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2353
diff changeset
8589 interrupt_input_pending = 0;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8590 BLOCK_INPUT;
9337
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
8591
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
8592 /* 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
8593 input_signal_count++;
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
8594
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8595 if (numchars <= 0)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8596 abort (); /* Don't think this happens. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8597
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8598 /* 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
8599 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
8600 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
8601 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8602 #if 0 /* This ought to be unnecessary; let's verify it. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8603 #ifdef FIOSNBIO
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8604 /* 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
8605 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
8606 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
8607 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
8608 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
8609 #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
8610 #endif
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8611
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8612 #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
8613 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
8614 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
8615 for X connections. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8616 #ifndef SIGIO
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8617 #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
8618 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
8619 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8620 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
8621 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
8622 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
8623 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
8624 }
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
8625 #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
8626 #endif /* SIGIO */
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8627 #endif
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8628
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8629 /* 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
8630 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
8631 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8632 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
8633 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
8634 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8635
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8636 while (XPending (dpyinfo->display))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8637 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8638 XNextEvent (dpyinfo->display, &event);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8639
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8640 if (display_busy_cursor_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8641 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8642 /* Setting inhibit_busy_cursor to 2 inhibits busy-cursor
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8643 display until the next X event is read and we come
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8644 here again. Setting it to 1 inhibits busy-cursor
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8645 display for direct commands. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8646 if (event.type == MotionNotify
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8647 || event.type == EnterNotify
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8648 || (dpyinfo->grabbed
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8649 && event.type != ButtonRelease))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8650 inhibit_busy_cursor = 2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8651 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8652 inhibit_busy_cursor = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8653 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8654
15973
6ad9e8fee494 (XTread_socket): Call XFilterEvent on all events,
Richard M. Stallman <rms@gnu.org>
parents: 15928
diff changeset
8655 #ifdef HAVE_X_I18N
15990
1185f8fc0bfb (do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents: 15973
diff changeset
8656 {
1185f8fc0bfb (do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents: 15973
diff changeset
8657 struct frame *f1 = x_any_window_to_frame (dpyinfo,
22230
32f2adf05397 (XTread_socket): Fix second argument of x_any_window_to_frame.
Richard M. Stallman <rms@gnu.org>
parents: 21933
diff changeset
8658 event.xclient.window);
15990
1185f8fc0bfb (do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents: 15973
diff changeset
8659 /* The necessity of the following line took me
1185f8fc0bfb (do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents: 15973
diff changeset
8660 a full work-day to decipher from the docs!! */
1185f8fc0bfb (do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents: 15973
diff changeset
8661 if (f1 != 0 && FRAME_XIC (f1) && XFilterEvent (&event, None))
1185f8fc0bfb (do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents: 15973
diff changeset
8662 break;
1185f8fc0bfb (do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents: 15973
diff changeset
8663 }
15973
6ad9e8fee494 (XTread_socket): Call XFilterEvent on all events,
Richard M. Stallman <rms@gnu.org>
parents: 15928
diff changeset
8664 #endif
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8665 event_found = 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8666
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8667 switch (event.type)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8668 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8669 case ClientMessage:
642
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
8670 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8671 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
8672 == 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
8673 && event.xclient.format == 32)
642
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
8674 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8675 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
8676 == 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
8677 {
18885
f7b6579204b8 (XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents: 18775
diff changeset
8678 /* Use x_any_window_to_frame because this
f7b6579204b8 (XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents: 18775
diff changeset
8679 could be the shell widget window
f7b6579204b8 (XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents: 18775
diff changeset
8680 if the frame has no title bar. */
f7b6579204b8 (XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents: 18775
diff changeset
8681 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
8682 #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
8683 /* Not quite sure this is needed -pd */
18885
f7b6579204b8 (XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents: 18775
diff changeset
8684 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
8685 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
8686 #endif
18996
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
8687 /* 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
8688 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
8689 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
8690 if (f)
18996
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
8691 {
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
8692 Display *d = event.xclient.display;
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
8693 /* 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
8694 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
8695 int count = x_catch_errors (d);
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
8696 XSetInputFocus (d, event.xclient.window,
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
8697 RevertToPointerRoot,
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
8698 event.xclient.data.l[1]);
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
8699 /* 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
8700 if there is an error. */
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
8701 XSync (d, False);
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
8702 x_uncatch_errors (d, count);
ef81a8b79506 (dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents: 18885
diff changeset
8703 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8704 /* Not certain about handling scroll bars here */
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8705 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8706 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
8707 == dpyinfo->Xatom_wm_save_yourself)
642
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
8708 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8709 /* 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
8710 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
8711 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
8712 PropertyNotify. Can restart processing when
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8713 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
8714 if (numchars > 0)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8715 {
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
8716 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
8717 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
8718
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8719 /* 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
8720 for a single Emacs process. */
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8721 if (f == selected_frame)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8722 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
8723 event.xclient.window,
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8724 initial_argv, initial_argc);
15519
045a36502ad4 (XTread_socket, Xatom_wm_save_yourself clause):
Richard M. Stallman <rms@gnu.org>
parents: 15515
diff changeset
8725 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
8726 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
8727 event.xclient.window,
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8728 0, 0);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8729 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8730 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8731 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
8732 == 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
8733 {
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
8734 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
8735 = 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
8736 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
8737
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8738 if (f)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8739 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8740 if (numchars == 0)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8741 abort ();
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8742
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8743 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
8744 XSETFRAME (bufp->frame_or_window, f);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8745 bufp++;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8746
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8747 count += 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8748 numchars -= 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8749 }
642
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
8750 }
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
8751 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8752 else if (event.xclient.message_type
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8753 == dpyinfo->Xatom_wm_configure_denied)
642
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
8754 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8755 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8756 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
8757 == 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
8758 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8759 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
8760 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
8761 = 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
8762
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8763 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
8764 new_y = event.xclient.data.s[1];
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8765
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8766 if (f)
5156
fd78458b8c43 (XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents: 5018
diff changeset
8767 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
8768 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
8769 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
8770 }
642
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
8771 }
13507
9a9f459075af (HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
8772 #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
8773 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
8774 == dpyinfo->Xatom_editres)
5156
fd78458b8c43 (XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents: 5018
diff changeset
8775 {
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
8776 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
8777 = 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
8778 _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
8779 &event, NULL);
5156
fd78458b8c43 (XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents: 5018
diff changeset
8780 }
13507
9a9f459075af (HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
8781 #endif /* HACK_EDITRES */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8782 else if ((event.xclient.message_type
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8783 == dpyinfo->Xatom_DONE)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8784 || (event.xclient.message_type
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8785 == dpyinfo->Xatom_PAGE))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8786 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8787 /* 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
8788 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
8789 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
8790 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
8791 Window gs_window = (Window) event.xclient.data.l[0];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8792 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
8793 struct frame *f
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8794 = 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
8795 x_kill_gs_process (pixmap, f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8796 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
8797 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8798 #ifdef USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8799 /* 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
8800 we construct an input_event. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8801 else if (event.xclient.message_type
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8802 == dpyinfo->Xatom_Scrollbar)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8803 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8804 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
8805 ++bufp, ++count, --numchars;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8806 goto out;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8807 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8808 #endif /* USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8809 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8810 goto OTHER;
642
b0ddc138b0b5 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
8811 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8812 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8813
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8814 case SelectionNotify:
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8815 #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
8816 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
8817 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8818 #endif /* not USE_X_TOOLKIT */
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
8819 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
8820 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8821
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8822 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
8823 #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
8824 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
8825 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8826 #endif /* USE_X_TOOLKIT */
6941
a914781ef58a (Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents: 6934
diff changeset
8827 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8828 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
8829
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8830 if (numchars == 0)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8831 abort ();
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8832
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8833 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
8834 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
8835 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
8836 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
8837 bufp->frame_or_window = Qnil;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8838 bufp++;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8839
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8840 count += 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8841 numchars -= 1;
6941
a914781ef58a (Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents: 6934
diff changeset
8842 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8843 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8844
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8845 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
8846 #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
8847 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
8848 goto OTHER;
6984
8e9465c13702 (XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents: 6983
diff changeset
8849 #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
8850 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
8851 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
8852 &event);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8853 else
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8854 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8855 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
8856
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8857 if (numchars == 0)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8858 abort ();
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8859
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8860 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
8861 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
8862 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
8863 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
8864 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
8865 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
8866 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
8867 bufp->frame_or_window = Qnil;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8868 bufp++;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8869
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8870 count += 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8871 numchars -= 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8872 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8873 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8874
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8875 case PropertyNotify:
6984
8e9465c13702 (XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents: 6983
diff changeset
8876 #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
8877 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
8878 goto OTHER;
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8879 #endif /* not USE_X_TOOLKIT */
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
8880 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
8881 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8882
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8883 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
8884 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
8885 if (f)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8886 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8887 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
8888 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
8889 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
8890 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
8891 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
8892 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8893 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8894
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8895 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
8896 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
8897 if (f)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8898 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8899 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
8900 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8901 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
8902 f->async_iconified = 0;
18074
06e42aa4c208 (process_expose_from_menu, XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 18057
diff changeset
8903 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
8904 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
8905 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8906 else
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8907 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
8908 event.xexpose.window),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8909 event.xexpose.x, event.xexpose.y,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8910 event.xexpose.width, event.xexpose.height);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8911 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8912 else
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8913 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8914 #ifdef USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8915 /* Dispatch event to the widget. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8916 goto OTHER;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8917 #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
8918 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
8919 = 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
8920
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8921 if (bar)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8922 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
8923 #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
8924 else
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8925 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8926 #endif /* USE_X_TOOLKIT */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8927 #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
8928 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8929 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8930
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8931 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
8932 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
8933 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
8934 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
8935 if (f)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8936 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8937 expose_frame (f,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8938 event.xgraphicsexpose.x, event.xgraphicsexpose.y,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8939 event.xgraphicsexpose.width,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8940 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
8941 }
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8942 #ifdef USE_X_TOOLKIT
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8943 else
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8944 goto OTHER;
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8945 #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
8946 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8947
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8948 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
8949 source area was completely
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8950 available */
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8951 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8952
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8953 case UnmapNotify:
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8954 /* 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
8955 if (event.xmap.window == tip_window)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8956 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8957 tip_window = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8958 redo_mouse_highlight ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8959 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8960
12750
7e5276da6270 (XTread_socket): For UnmapNotify, use x_top_window_to_frame.
Richard M. Stallman <rms@gnu.org>
parents: 12667
diff changeset
8961 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
8962 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
8963 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
8964 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8965 /* 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
8966 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
8967 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
8968 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
8969 /* 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
8970 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
8971 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
8972 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
8973 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
8974 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
8975 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
8976 {
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
8977 f->async_iconified = 1;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
8978
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
8979 bufp->kind = iconify_event;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
8980 XSETFRAME (bufp->frame_or_window, f);
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
8981 bufp++;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
8982 count++;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
8983 numchars--;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
8984 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8985 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8986 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8987
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8988 case MapNotify:
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8989 if (event.xmap.window == tip_window)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8990 /* 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
8991 the SET_FRAME_GARBAGED below. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8992 goto OTHER;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8993
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8994 /* 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
8995 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
8996 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
8997 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
8998 if (f)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
8999 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9000 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
9001 f->async_iconified = 0;
18074
06e42aa4c208 (process_expose_from_menu, XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 18057
diff changeset
9002 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
9003
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9004 /* 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
9005 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
9006 SET_FRAME_GARBAGED (f);
9823
e6dbda62fd61 (XTread_socket): Generate iconify and deiconify events.
Karl Heuer <kwzh@gnu.org>
parents: 9763
diff changeset
9007
11348
e366abc2c753 (XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents: 11259
diff changeset
9008 if (f->iconified)
e366abc2c753 (XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents: 11259
diff changeset
9009 {
e366abc2c753 (XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents: 11259
diff changeset
9010 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
9011 XSETFRAME (bufp->frame_or_window, f);
e366abc2c753 (XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents: 11259
diff changeset
9012 bufp++;
e366abc2c753 (XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents: 11259
diff changeset
9013 count++;
e366abc2c753 (XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents: 11259
diff changeset
9014 numchars--;
e366abc2c753 (XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents: 11259
diff changeset
9015 }
17519
5aa7011aa3d5 (x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents: 17371
diff changeset
9016 else if (! NILP (Vframe_list)
14895
634fc7befbdf (XTread_socket, MapNotify case):
Richard M. Stallman <rms@gnu.org>
parents: 14830
diff changeset
9017 && ! NILP (XCONS (Vframe_list)->cdr))
11921
6ecaa3fac4e4 (XTread_socket): For MapNotify, call record_asynch_buffer_change.
Karl Heuer <kwzh@gnu.org>
parents: 11915
diff changeset
9018 /* 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
9019 to update the frame titles
6ecaa3fac4e4 (XTread_socket): For MapNotify, call record_asynch_buffer_change.
Karl Heuer <kwzh@gnu.org>
parents: 11915
diff changeset
9020 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
9021 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
9022 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9023 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9024
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9025 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
9026 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
9027
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9028 #ifdef USE_MOTIF
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9029 /* 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
9030 from consuming key events. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9031 if (f == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9032 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9033 Widget widget = XtWindowToWidget (dpyinfo->display,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9034 event.xkey.window);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9035 if (widget && XmIsScrollBar (widget))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9036 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9037 widget = XtParent (widget);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9038 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
9039 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9040 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9041 #endif /* USE_MOTIF */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9042
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9043 if (f != 0)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9044 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9045 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
9046 /* 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
9047 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
9048 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
9049 int modifiers;
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 event.xkey.state
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9052 |= 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
9053 extra_keyboard_modifiers);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9054 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
9055
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9056 /* 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
9057
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9058 /* 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
9059 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
9060 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
9061 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
9062 | 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
9063 | 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
9064 | 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
9065
16483
1b53fdb98184 (XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents: 16430
diff changeset
9066 /* In case Meta is ComposeCharacter,
1b53fdb98184 (XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents: 16430
diff changeset
9067 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
9068 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
9069 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
9070 not it is combined with Meta. */
1b53fdb98184 (XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents: 16430
diff changeset
9071 if (modifiers & dpyinfo->meta_mod_mask)
1b53fdb98184 (XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents: 16430
diff changeset
9072 bzero (&compose_status, sizeof (compose_status));
1b53fdb98184 (XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents: 16430
diff changeset
9073
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9074 #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
9075 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
9076 {
18705
c4f2eab8e736 (x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents: 18646
diff changeset
9077 /* The necessity of the following line took me
c4f2eab8e736 (x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents: 18646
diff changeset
9078 a full work-day to decipher from the docs!! */
c4f2eab8e736 (x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents: 18646
diff changeset
9079 if (XFilterEvent (&event, None))
c4f2eab8e736 (x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents: 18646
diff changeset
9080 break;
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9081 nbytes = XmbLookupString (FRAME_XIC (f),
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9082 &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
9083 80, &keysym,
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9084 &status_return);
23567
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
9085 if (status_return == XLookupNone)
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
9086 break;
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
9087 else if (status_return == XLookupChars)
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
9088 keysym = NoSymbol;
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
9089 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
9090 && status_return != XLookupBoth)
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
9091 abort ();
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9092 }
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9093 else
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9094 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
9095 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
9096 #else
10287
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
9097 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
9098 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
9099 #endif
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9100
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9101 orig_keysym = keysym;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9102
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9103 if (numchars > 1)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9104 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9105 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
9106 || keysym == XK_Delete
17227
d11d6c9a48e8 (XTread_socket): Handle ISO_Left_Tab.
Richard M. Stallman <rms@gnu.org>
parents: 17194
diff changeset
9107 #ifdef XK_ISO_Left_Tab
17232
4604d19bd730 (XTread_socket): Accept XK_ISO_* keys.
Richard M. Stallman <rms@gnu.org>
parents: 17227
diff changeset
9108 || (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
9109 #endif
22400
8fbe6f509385 (XTread_socket): Accept Japanese XK keysyms.
Richard M. Stallman <rms@gnu.org>
parents: 22230
diff changeset
9110 || (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
9111 || 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
9112 || IsMiscFunctionKey (keysym) /* 0xff60 <= x < VARIES */
3218
0069a30d083f (XTread_socket, case KeyPress) [HPUX]:
Richard M. Stallman <rms@gnu.org>
parents: 3135
diff changeset
9113 #ifdef HPUX
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9114 /* 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
9115 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
9116 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
9117 incorrectly. */
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9118 || ((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
9119 && (unsigned)(keysym) < XK_KP_Space)
3218
0069a30d083f (XTread_socket, case KeyPress) [HPUX]:
Richard M. Stallman <rms@gnu.org>
parents: 3135
diff changeset
9120 #endif
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9121 #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
9122 || orig_keysym == XK_dead_circumflex
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9123 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9124 #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
9125 || orig_keysym == XK_dead_grave
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9126 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9127 #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
9128 || orig_keysym == XK_dead_tilde
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9129 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9130 #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
9131 || orig_keysym == XK_dead_diaeresis
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9132 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9133 #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
9134 || orig_keysym == XK_dead_macron
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9135 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9136 #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
9137 || orig_keysym == XK_dead_degree
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9138 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9139 #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
9140 || orig_keysym == XK_dead_acute
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9141 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9142 #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
9143 || orig_keysym == XK_dead_cedilla
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9144 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9145 #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
9146 || orig_keysym == XK_dead_breve
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9147 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9148 #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
9149 || orig_keysym == XK_dead_ogonek
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9150 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9151 #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
9152 || orig_keysym == XK_dead_caron
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9153 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9154 #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
9155 || orig_keysym == XK_dead_doubleacute
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9156 #endif
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9157 #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
9158 || orig_keysym == XK_dead_abovedot
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
9159 #endif
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9160 || 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
9161 || 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
9162 /* 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
9163 || (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
9164 && ! (IsModifierKey (orig_keysym)
4244
bc70363458c3 (XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents: 4147
diff changeset
9165 #ifndef HAVE_X11R5
bc70363458c3 (XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents: 4147
diff changeset
9166 #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
9167 || ((unsigned)(orig_keysym) == XK_Mode_switch)
4244
bc70363458c3 (XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents: 4147
diff changeset
9168 #endif
bc70363458c3 (XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents: 4147
diff changeset
9169 #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
9170 || ((unsigned)(orig_keysym) == XK_Num_Lock)
4244
bc70363458c3 (XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents: 4147
diff changeset
9171 #endif
bc70363458c3 (XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents: 4147
diff changeset
9172 #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
9173 ))
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9174 {
2064
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
9175 if (temp_index == sizeof temp_buffer / sizeof (short))
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
9176 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
9177 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
9178 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
9179 bufp->code = keysym;
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
9180 XSETFRAME (bufp->frame_or_window, f);
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
9181 bufp->modifiers
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
9182 = 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
9183 modifiers);
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 642
diff changeset
9184 bufp->timestamp = event.xkey.time;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9185 bufp++;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9186 count++;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9187 numchars--;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9188
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9189 if (display_busy_cursor_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9190 if (keysym != XK_Return || minibuf_level == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9191 inhibit_busy_cursor = 2;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9192 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9193 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
9194 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9195 register int i;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9196
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9197 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
9198 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9199 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
9200 temp_index = 0;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9201 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
9202 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
9203 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
9204 XSETFRAME (bufp->frame_or_window, f);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9205 bufp->modifiers
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9206 = 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
9207 modifiers);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9208 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
9209 bufp++;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9210 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9211
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9212 count += nbytes;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9213 numchars -= nbytes;
23567
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
9214
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
9215 if (keysym == NoSymbol)
5a0cdfd791a2 (XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents: 23515
diff changeset
9216 break;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9217 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9218 else
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9219 abort ();
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9220 }
2064
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
9221 else
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
9222 abort ();
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9223 }
13898
dceb33c07f9e (XTread_socket): Pass KeyPress events to the toolkit.
Richard M. Stallman <rms@gnu.org>
parents: 13884
diff changeset
9224 goto OTHER;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9225
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9226 /* 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
9227 FocusIn-EnterNotify FocusOut-LeaveNotify mess. If
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9228 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
9229 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
9230 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
9231 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
9232
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9233 case EnterNotify:
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9234 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9235 int from_menu_bar_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9236
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9237 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
9238
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9239 #ifdef LESSTIF_VERSION
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9240 /* 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
9241 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
9242 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
9243 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
9244 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
9245 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
9246 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
9247 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
9248 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
9249 value.
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 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
9252 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
9253
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9254 (gerd, LessTif 0.88.1). */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9255
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9256 if (!event.xcrossing.focus
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9257 && f
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9258 && f->output_data.x->menubar_widget)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9259 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9260 Window focus;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9261 int revert;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9262
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9263 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
9264 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
9265 from_menu_bar_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9266 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9267 #endif /* LESSTIF_VERSION */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9268
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9269 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
9270 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9271 /* Avoid nasty pop/raise loops. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9272 if (f && (!(f->auto_raise)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9273 || !(f->auto_lower)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9274 || (event.xcrossing.time - enter_timestamp) > 500))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9275 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9276 x_new_focus_frame (dpyinfo, f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9277 enter_timestamp = event.xcrossing.time;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9278 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9279 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9280 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
9281 x_new_focus_frame (dpyinfo, 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9282
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9283 /* EnterNotify counts as mouse movement,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9284 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
9285 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
9286 note_mouse_movement (f, &event.xmotion);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9287 goto OTHER;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9288 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9289
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9290 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
9291 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
9292 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
9293 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
9294 if (f)
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
9295 x_new_focus_frame (dpyinfo, f);
13205
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
9296
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9297 #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
9298 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
9299 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
9300 #endif
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9301
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;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9303
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9304 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
9305 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
9306 if (f)
7169
c21fcad6f1f5 (XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents: 7167
diff changeset
9307 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9308 Lisp_Object frame;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9309 int from_menu_bar_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9310
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9311 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
9312 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9313 /* 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
9314 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
9315 clear_mouse_face (dpyinfo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9316 dpyinfo->mouse_face_mouse_frame = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9317 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9318
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9319 /* 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
9320 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
9321 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
9322 the mouse leaves the frame. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9323 if (any_help_event_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9324 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9325 XSETFRAME (frame, f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9326 bufp->kind = HELP_EVENT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9327 bufp->frame_or_window = Fcons (frame, Qnil);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9328 ++bufp, ++count, --numchars;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9329 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9330
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9331 #ifdef LESSTIF_VERSION
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9332 /* 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
9333 EnterNotify case. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9334 if (!event.xcrossing.focus
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9335 && f->output_data.x->menubar_widget)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9336 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9337 Window focus;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9338 int revert;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9339 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
9340 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
9341 from_menu_bar_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9342 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9343 #endif /* LESSTIF_VERSION */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9344
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9345 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
9346 x_mouse_leave (dpyinfo);
7169
c21fcad6f1f5 (XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents: 7167
diff changeset
9347 else
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9348 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
9349 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
9350 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
9351 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
9352 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
9353 }
7169
c21fcad6f1f5 (XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents: 7167
diff changeset
9354 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9355 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9356
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9357 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
9358 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
9359 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
9360 && 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
9361 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
9362 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
9363 x_new_focus_frame (dpyinfo, 0);
13205
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
9364
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9365 #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
9366 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
9367 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
9368 #endif
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
9369
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9370 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9371
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9372 case MotionNotify:
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9373 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9374 previous_help_echo = help_echo;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9375 help_echo = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9376
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9377 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
9378 && 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
9379 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
9380 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
9381 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
9382
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9383 if (f)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9384 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
9385 else
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9386 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9387 #ifndef 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
9388 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
9389 = 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
9390
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9391 if (bar)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9392 x_scroll_bar_note_movement (bar, &event);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9393 #endif /* USE_X_TOOLKIT */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9394
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9395 /* 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
9396 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
9397 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
9398 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9399
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9400 /* 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
9401 has changed, generate a HELP_EVENT. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9402 if (STRINGP (help_echo)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9403 || STRINGP (previous_help_echo))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9404 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9405 Lisp_Object frame;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9406
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9407 if (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9408 XSETFRAME (frame, f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9409 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9410 frame = Qnil;
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 any_help_event_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9413 bufp->kind = HELP_EVENT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9414 bufp->frame_or_window = Fcons (frame, help_echo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9415 ++bufp, ++count, --numchars;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9416 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9417
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9418 goto OTHER;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9419 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9420
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9421 case ConfigureNotify:
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
9422 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
9423 if (f)
3030
2c5ea1c98256 (XTread_socket): For ConfigureNotify event,
Richard M. Stallman <rms@gnu.org>
parents: 3016
diff changeset
9424 {
24489
abf5b4802f9b (XTread_socket) <ConfigureNotify>:
Karl Heuer <kwzh@gnu.org>
parents: 24484
diff changeset
9425 int rows = PIXEL_TO_CHAR_HEIGHT (f, event.xconfigure.height);
abf5b4802f9b (XTread_socket) <ConfigureNotify>:
Karl Heuer <kwzh@gnu.org>
parents: 24484
diff changeset
9426 int columns = PIXEL_TO_CHAR_WIDTH (f, event.xconfigure.width);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9427
11436
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
9428 #ifndef USE_X_TOOLKIT
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
9429 /* 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
9430 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
9431 of the EmacsFrame widget. */
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
9432
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9433 /* 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
9434 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
9435 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
9436 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
9437 || 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
9438 || 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
9439 || 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
9440 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9441 change_frame_size (f, rows, columns, 0, 1);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9442 SET_FRAME_GARBAGED (f);
16491
7094452bc337 (cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents: 16483
diff changeset
9443 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
9444 }
11436
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
9445 #endif
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
9446
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
9447 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
9448 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
9449
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9450 /* 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
9451 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
9452 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
9453 &f->output_data.x->top_pos);
d25d2472df51 (XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents: 17963
diff changeset
9454
d25d2472df51 (XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents: 17963
diff changeset
9455 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
9456 {
d25d2472df51 (XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents: 17963
diff changeset
9457 /* 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
9458 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
9459 f->output_data.x->win_gravity = NorthWestGravity;
d25d2472df51 (XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents: 17963
diff changeset
9460 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
9461 }
20182
9f3dd970927e (XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents: 20180
diff changeset
9462 #ifdef USE_MOTIF
9f3dd970927e (XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents: 20180
diff changeset
9463 /* 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
9464 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
9465 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
9466 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
9467 {
9f3dd970927e (XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents: 20180
diff changeset
9468 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
9469 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
9470 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9471 #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
9472 }
11436
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
9473 goto OTHER;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9474
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9475 case ButtonPress:
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9476 case ButtonRelease:
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9477 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9478 /* 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
9479 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
9480 struct input_event emacs_event;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9481 int toolbar_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9482
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9483 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
9484 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
9485
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9486 if (dpyinfo->grabbed
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9487 && last_mouse_frame
10274
83aaf59dabbe (XTupdate_begin): Fix backward test in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 10223
diff changeset
9488 && 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
9489 f = last_mouse_frame;
83aaf59dabbe (XTupdate_begin): Fix backward test in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 10223
diff changeset
9490 else
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
9491 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
9492
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9493 if (f)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9494 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9495 /* Is this in the toolbar? */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9496 if (WINDOWP (f->toolbar_window)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9497 && XFASTINT (XWINDOW (f->toolbar_window)->height))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9498 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9499 Lisp_Object window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9500 int p, x, y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9501
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9502 x = event.xbutton.x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9503 y = event.xbutton.y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9504
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9505 /* Set x and y. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9506 window = window_from_coordinates (f, x, y, &p, 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9507 if (EQ (window, f->toolbar_window))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9508 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9509 x_handle_toolbar_click (f, &event.xbutton);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9510 toolbar_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9511 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9512 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9513
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9514 if (!toolbar_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9515 if (!dpyinfo->x_focus_frame
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9516 || f == dpyinfo->x_focus_frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9517 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
9518 }
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9519 else
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9520 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9521 #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
9522 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
9523 = 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
9524
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9525 if (bar)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9526 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
9527 #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
9528 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9529
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9530 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
9531 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9532 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
9533 last_mouse_frame = f;
23643
701b6bdc7a22 (XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents: 23567
diff changeset
9534 /* Ignore any mouse motion that happened
701b6bdc7a22 (XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents: 23567
diff changeset
9535 before this event; any subsequent mouse-movement
701b6bdc7a22 (XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents: 23567
diff changeset
9536 Emacs events should reflect only motion after
701b6bdc7a22 (XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents: 23567
diff changeset
9537 the ButtonPress. */
23701
6c0896abbbd4 (XTread_socket): Fix previous change in case F == 0.
Karl Heuer <kwzh@gnu.org>
parents: 23684
diff changeset
9538 if (f != 0)
6c0896abbbd4 (XTread_socket): Fix previous change in case F == 0.
Karl Heuer <kwzh@gnu.org>
parents: 23684
diff changeset
9539 f->mouse_moved = 0;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9540
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9541 if (!toolbar_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9542 last_toolbar_item = -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9543 if (display_busy_cursor_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9544 inhibit_busy_cursor = 2;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9545 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9546 else
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9547 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9548 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
9549 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9550
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9551 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
9552 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9553 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
9554 bufp++;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9555 count++;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9556 numchars--;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9557 }
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9558
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9559 #ifdef USE_X_TOOLKIT
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
9560 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
9561 /* For a down-event in the menu bar,
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
9562 don't pass it to Xt right now.
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
9563 Instead, save it away
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
9564 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
9565 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
9566 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
9567 /* 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
9568 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
9569 && event.xbutton.x >= 0
21b6b8f50143 (XTread_socket): Verify a ButtonPress was actually in the
Richard M. Stallman <rms@gnu.org>
parents: 13507
diff changeset
9570 && 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
9571 && event.xbutton.y >= 0
21b6b8f50143 (XTread_socket): Verify a ButtonPress was actually in the
Richard M. Stallman <rms@gnu.org>
parents: 13507
diff changeset
9572 && 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
9573 && event.xbutton.same_screen)
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
9574 {
15711
099dc465c948 (SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents: 15639
diff changeset
9575 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
9576 XSETFRAME (last_mouse_press_frame, f);
15793
fc460a98a7f9 (last_mouse_press_frame): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 15711
diff changeset
9577 }
15803
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
9578 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
9579 {
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
9580 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
9581 goto OTHER;
15803
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
9582 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9583
15803
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
9584 #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
9585 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
9586 else if (event.type == ButtonRelease)
fc460a98a7f9 (last_mouse_press_frame): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 15711
diff changeset
9587 {
15803
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
9588 if (!NILP (last_mouse_press_frame))
15794
c741a26258ce Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 15793
diff changeset
9589 {
15803
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
9590 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
9591 if (f->output_data.x)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9592 SET_SAVED_BUTTON_EVENT;
15794
c741a26258ce Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 15793
diff changeset
9593 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9594 else
15808
3afa38a18102 (XTread_socket): Delete the code to pass menu bar keys
Richard M. Stallman <rms@gnu.org>
parents: 15806
diff changeset
9595 goto OTHER;
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
9596 }
15803
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
9597 #endif /* USE_MOTIF */
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
9598 else
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
9599 goto OTHER;
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9600 #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
9601 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9602 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9603
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9604 case CirculateNotify:
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9605 goto OTHER;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9606
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9607 case CirculateRequest:
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9608 goto OTHER;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9609
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9610 case VisibilityNotify:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9611 goto OTHER;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9612
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9613 case MappingNotify:
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9614 /* 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
9615 local cache. */
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9616 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
9617 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9618 case MappingModifier:
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9619 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
9620 /* 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
9621 case MappingKeyboard:
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9622 XRefreshKeyboardMapping (&event.xmapping);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9623 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9624 goto OTHER;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9625
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9626 default:
13898
dceb33c07f9e (XTread_socket): Pass KeyPress events to the toolkit.
Richard M. Stallman <rms@gnu.org>
parents: 13884
diff changeset
9627 OTHER:
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9628 #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
9629 BLOCK_INPUT;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9630 XtDispatchEvent (&event);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9631 UNBLOCK_INPUT;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
9632 #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
9633 break;
1436
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
9634 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9635 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9636 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9637
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9638 out:;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9639
8485
6e4b40c80021 (XTread_socket): Don't test X_IO_BUG; make that code unconditional.
Richard M. Stallman <rms@gnu.org>
parents: 8437
diff changeset
9640 /* 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
9641 when the window is destroyed. Detect that. (1994.) */
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
9642 if (! event_found)
7916
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
9643 {
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
9644 /* 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
9645 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
9646 B. Bretthauer, 1994 */
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
9647 x_noop_count++;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
9648 if (x_noop_count >= 100)
7916
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
9649 {
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
9650 x_noop_count=0;
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
9651
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
9652 if (next_noop_dpyinfo == 0)
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
9653 next_noop_dpyinfo = x_display_list;
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
9654
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
9655 XNoOp (next_noop_dpyinfo->display);
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
9656
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
9657 /* 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
9658 next_noop_dpyinfo = next_noop_dpyinfo->next;
7916
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
9659 }
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
9660 }
5753
eb44ecad5557 (XTread_socket): Add X_IO_BUG conditional.
Richard M. Stallman <rms@gnu.org>
parents: 5740
diff changeset
9661
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9662 /* 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
9663 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
9664 /* ??? 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
9665 if (pending_autoraise_frame)
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
9666 {
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
9667 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
9668 pending_autoraise_frame = 0;
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
9669 }
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
9670
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9671 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9672 return count;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9673 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9674
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9675
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9676
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9677
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9678 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9679 Text Cursor
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9680 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9681
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9682 /* 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
9683 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
9684 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
9685 line after HPOS has been written. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9686
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9687 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9688 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
9689 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9690 int hpos, n;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9691 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9692 if (updated_area == TEXT_AREA
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9693 && 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
9694 && hpos <= w->phys_cursor.hpos
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9695 && (n < 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9696 || hpos + n > w->phys_cursor.hpos))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9697 w->phys_cursor_on_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9698 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9699
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9700
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9701 /* 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
9702 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
9703 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
9704 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
9705
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9706 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
9707 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
9708 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
9709
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9710 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9711 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
9712 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9713 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9714 GC gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9715 int whole_line_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9716 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9717 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
9718 XRectangle clip_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9719 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
9720
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9721 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
9722
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9723 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
9724 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
9725 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
9726 clip_rect.width = window_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9727 clip_rect.height = row->visible_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9728
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9729 /* 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
9730 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
9731 if (whole_line_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9732 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9733 clip_rect.x -= FRAME_X_FLAGS_AREA_WIDTH (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9734 clip_rect.width += 2 * FRAME_X_FLAGS_AREA_WIDTH (f);
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9737 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
9738 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9739
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 /* 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
9742
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9743 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9744 x_draw_hollow_cursor (w, row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9745 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9746 struct glyph_row *row;
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 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
9749 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
9750 Display *dpy = FRAME_X_DISPLAY (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9751 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
9752 XGCValues xgcv;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9753 struct glyph *cursor_glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9754 GC gc;
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 /* 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
9757 coordinates. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9758 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
9759 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
9760 + row->ascent - w->phys_cursor_ascent);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9761 h = row->height - 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9762
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9763 /* 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
9764 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
9765 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
9766 if (cursor_glyph == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9767 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9768
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9769 /* 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
9770 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
9771 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
9772 width instead. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9773 wd = cursor_glyph->pixel_width - 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9774 if (cursor_glyph->type == STRETCH_GLYPH
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9775 && !x_stretch_cursor_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9776 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
9777
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9778 /* 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
9779 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
9780 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
9781 if (dpyinfo->scratch_cursor_gc)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9782 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
9783 else
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9784 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
9785 GCForeground, &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9786 gc = dpyinfo->scratch_cursor_gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9787
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9788 /* 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
9789 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
9790 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
9791 XSetClipMask (dpy, gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9792 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9793
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9794
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9795 /* 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
9796
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9797 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
9798 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
9799 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
9800 --gerd. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9801
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9802 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9803 x_draw_bar_cursor (w, row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9804 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9805 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9806 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9807 /* 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
9808 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
9809 glyphs and mini-buffer. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9810 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
9811 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9812 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9813 struct glyph *cursor_glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9814 GC gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9815 int x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9816 unsigned long mask;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9817 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9818 Display *dpy;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9819 Window window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9820
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9821 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
9822 if (cursor_glyph == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9823 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9824
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9825 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
9826 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
9827 xgcv.graphics_exposures = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9828 mask = GCForeground | GCBackground | GCGraphicsExposures;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9829 dpy = FRAME_X_DISPLAY (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9830 window = FRAME_X_WINDOW (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9831 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
9832
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9833 if (gc)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9834 XChangeGC (dpy, gc, mask, &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9835 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9836 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9837 gc = XCreateGC (dpy, window, mask, &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9838 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
9839 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9840
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9841 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
9842 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
9843 XFillRectangle (dpy, window, gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9844 x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9845 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
9846 min (cursor_glyph->pixel_width,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9847 f->output_data.x->cursor_width),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9848 row->height);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9849 XSetClipMask (dpy, gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9850 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9851 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9852
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9853
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9854 /* 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
9855 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
9856 is is about to be rewritten. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9857
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9858 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9859 x_clear_cursor (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9860 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9861 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9862 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
9863 x_update_window_cursor (w, 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9864 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9865
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9866
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9867 /* 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
9868 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
9869
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9870 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9871 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
9872 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9873 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9874 enum draw_glyphs_face hl;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9875 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9876 /* 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
9877 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
9878 glyphs and mini-buffer. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9879 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
9880 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
9881 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
9882 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
9883 hl, 0, 0, 0);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
9884
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
9885 /* 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
9886 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
9887 are redrawn. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
9888 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
9889 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
9890 if (row > w->current_matrix->rows
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
9891 && MATRIX_ROW_OVERLAPS_SUCC_P (row - 1))
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
9892 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
9893
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
9894 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
9895 && MATRIX_ROW_OVERLAPS_PRED_P (row + 1))
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
9896 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
9897 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
9898 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9899 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9900
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 /* 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
9903
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9904 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9905 x_erase_phys_cursor (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9906 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9907 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9908 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9909 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
9910 int hpos = w->phys_cursor.hpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9911 int vpos = w->phys_cursor.vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9912 int mouse_face_here_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9913 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
9914 struct glyph_row *cursor_row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9915 struct glyph *cursor_glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9916 enum draw_glyphs_face hl;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9917
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9918 /* 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
9919 screen. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9920 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
9921 goto mark_cursor_off;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9922
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9923 /* 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
9924 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
9925 if (vpos >= active_glyphs->nrows)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9926 goto mark_cursor_off;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9927
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9928 /* 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
9929 can do. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9930 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
9931 if (!cursor_row->enabled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9932 goto mark_cursor_off;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9933
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9934 /* 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
9935 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
9936 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
9937 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
9938 cursor glyph at hand. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9939 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
9940 goto mark_cursor_off;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9941
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9942 /* 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
9943 we clear the cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9944 if (w == XWINDOW (dpyinfo->mouse_face_window)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9945 && (vpos > dpyinfo->mouse_face_beg_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9946 || (vpos == dpyinfo->mouse_face_beg_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9947 && hpos >= dpyinfo->mouse_face_beg_col))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9948 && (vpos < dpyinfo->mouse_face_end_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9949 || (vpos == dpyinfo->mouse_face_end_row
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9950 && hpos < dpyinfo->mouse_face_end_col))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9951 /* 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
9952 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
9953 mouse highlighting does not. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9954 && cursor_row->used[TEXT_AREA] > hpos)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9955 mouse_face_here_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9956
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9957 /* 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
9958 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
9959 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9960 int x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9961 int top_line_height = WINDOW_DISPLAY_TOP_LINE_HEIGHT (w);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9962
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9963 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
9964 if (cursor_glyph == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9965 goto mark_cursor_off;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9966
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9967 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
9968
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9969 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
9970 x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9971 WINDOW_TO_FRAME_PIXEL_Y (w, max (top_line_height,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9972 cursor_row->y)),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9973 cursor_glyph->pixel_width,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9974 cursor_row->visible_height,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9975 False);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9976 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9977
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9978 /* 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
9979 if (mouse_face_here_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9980 hl = DRAW_MOUSE_FACE;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9981 else if (cursor_row->inverse_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9982 hl = DRAW_INVERSE_VIDEO;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9983 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9984 hl = DRAW_NORMAL_TEXT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9985 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
9986
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9987 mark_cursor_off:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9988 w->phys_cursor_on_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9989 w->phys_cursor_type = NO_CURSOR;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9990 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9992
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9993 /* 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
9994 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
9995 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
9996
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9997 void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9998 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
9999 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10000 int on, hpos, vpos, x, y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10001 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10002 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10003 int new_cursor_type;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10004 struct glyph_matrix *current_glyphs;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10005 struct glyph_row *glyph_row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10006 struct glyph *glyph;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10007
2235
80e0d36bbb77 * xterm.c (x_display_box_cursor, x_display_bar_cursor): Don't
Jim Blandy <jimb@redhat.com>
parents: 2195
diff changeset
10008 /* 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
10009 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
10010 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
10011 window. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10012 if (! FRAME_VISIBLE_P (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10013 || FRAME_GARBAGED_P (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10014 || vpos >= w->current_matrix->nrows
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10015 || hpos >= w->current_matrix->matrix_w)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10016 return;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10017
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10018 /* 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
10019 if (!on && !w->phys_cursor_on_p)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10020 return;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10021
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10022 current_glyphs = w->current_matrix;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10023 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
10024 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
10025
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10026 /* 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
10027 display the cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10028 if (!glyph_row->enabled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10029 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10030 w->phys_cursor_on_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10031 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10032 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10033
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10034 xassert (interrupt_input_blocked);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10035
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10036 /* 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
10037 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
10038 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
10039 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
10040 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
10041 box cursor. */
25191
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10042 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
10043 && 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
10044 && 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
10045 {
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10046 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
10047 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
10048 else
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10049 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
10050 }
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10051 else
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10052 {
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10053 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
10054 || 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
10055 {
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10056 if (MINI_WINDOW_P (w))
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10057 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
10058 else
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10059 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
10060 }
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10061 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
10062 new_cursor_type = NO_CURSOR;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10063 else
25191
3a5376feb9aa (x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents: 25189
diff changeset
10064 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
10065 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10066
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10067 /* 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
10068 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
10069 erase it. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10070 if (w->phys_cursor_on_p
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10071 && (!on
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10072 || w->phys_cursor.x != x
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10073 || w->phys_cursor.y != y
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10074 || 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
10075 x_erase_phys_cursor (w);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10076
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10077 /* 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
10078 display it. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10079 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
10080 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10081 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
10082 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
10083
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10084 /* 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
10085 of them may need the information. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10086 w->phys_cursor.x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10087 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
10088 w->phys_cursor.hpos = hpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10089 w->phys_cursor.vpos = vpos;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10090 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
10091 w->phys_cursor_on_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10092
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10093 switch (new_cursor_type)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10094 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10095 case HOLLOW_BOX_CURSOR:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10096 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
10097 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10098
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10099 case FILLED_BOX_CURSOR:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10100 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
10101 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10102
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10103 case BAR_CURSOR:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10104 x_draw_bar_cursor (w, glyph_row);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10105 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10106
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10107 case NO_CURSOR:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10108 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10109
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10110 default:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10111 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10112 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10113 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10114
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10115 #ifndef XFlush
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10116 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
10117 XFlush (FRAME_X_DISPLAY (f));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10118 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10119 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10120
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10121
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10122 /* 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
10123 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
10124 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
10125 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
10126 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
10127
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
10128 void
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10129 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
10130 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10131 int on, hpos, vpos, x, y;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10132 {
5872
6389c826f847 (x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents: 5825
diff changeset
10133 BLOCK_INPUT;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10134 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
10135 UNBLOCK_INPUT;
80a5aedfb4c7 (XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents: 12192
diff changeset
10136 }
80a5aedfb4c7 (XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents: 12192
diff changeset
10137
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10138
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10139 /* 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
10140 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
10141
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
10142 void
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10143 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
10144 struct frame *f;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10145 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10146 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
10147 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10148
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10149
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10150 /* 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
10151 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
10152
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10153 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10154 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
10155 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10156 int on_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10157 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10158 while (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10159 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10160 if (!NILP (w->hchild))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10161 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
10162 else if (!NILP (w->vchild))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10163 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
10164 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10165 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
10166
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10167 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
10168 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10169 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10170
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10171
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10172 /* 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
10173 of ON. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10174
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10175 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10176 x_update_window_cursor (w, on)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10177 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
10178 int on;
80a5aedfb4c7 (XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents: 12192
diff changeset
10179 {
80a5aedfb4c7 (XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents: 12192
diff changeset
10180 BLOCK_INPUT;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10181 x_display_and_set_cursor (w, on, w->phys_cursor.hpos, w->phys_cursor.vpos,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10182 w->phys_cursor.x, w->phys_cursor.y);
5872
6389c826f847 (x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents: 5825
diff changeset
10183 UNBLOCK_INPUT;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10184 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10185
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
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10188
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10189 /* Icons. */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10190
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10191 /* 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
10192 when we get an expose event for it. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10193
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
10194 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10195 refreshicon (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10196 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10197 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10198 /* Normally, the window manager handles this function. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10199 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10200
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10201 /* Make the x-window of frame F use the gnu icon bitmap. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10202
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10203 int
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
10204 x_bitmap_icon (f, file)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10205 struct frame *f;
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
10206 Lisp_Object file;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10207 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10208 int bitmap_id;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10209
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
10210 if (FRAME_X_WINDOW (f) == 0)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10211 return 1;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10212
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
10213 /* 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
10214 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
10215 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
10216 f->output_data.x->icon_bitmap = 0;
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
10217
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
10218 if (STRINGP (file))
9542
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
10219 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
10220 else
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
10221 {
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
10222 /* 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
10223 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
10224 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
10225 = 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
10226 gnu_width, gnu_height);
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
10227
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
10228 /* 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
10229 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
10230 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
10231 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
10232 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
10233
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
10234 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
10235 }
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
10236
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
10237 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
10238 f->output_data.x->icon_bitmap = bitmap_id;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10239
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10240 return 0;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10241 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10242
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10243
12074
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
10244 /* 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
10245 Use ICON_NAME as the text. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10246
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10247 int
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10248 x_text_icon (f, icon_name)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10249 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10250 char *icon_name;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10251 {
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
10252 if (FRAME_X_WINDOW (f) == 0)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10253 return 1;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10254
12074
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
10255 #ifdef HAVE_X11R4
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
10256 {
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
10257 XTextProperty text;
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
10258 text.value = (unsigned char *) icon_name;
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
10259 text.encoding = XA_STRING;
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
10260 text.format = 8;
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
10261 text.nitems = strlen (icon_name);
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
10262 #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
10263 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
10264 &text);
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
10265 #else /* not USE_X_TOOLKIT */
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
10266 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
10267 #endif /* not USE_X_TOOLKIT */
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
10268 }
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
10269 #else /* not HAVE_X11R4 */
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
10270 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
10271 #endif /* not HAVE_X11R4 */
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
10272
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
10273 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
10274 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
10275 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
10276 x_wm_set_icon_pixmap (f, 0);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10277
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10278 return 0;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10279 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10280
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10281 #define X_ERROR_MESSAGE_SIZE 200
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10282
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10283 /* If non-nil, this should be a string.
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10284 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
10285
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10286 static Lisp_Object x_error_message_string;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10287
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10288 /* 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
10289 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
10290 x_catch_errors is in effect. */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10291
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10292 static void
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10293 x_error_catcher (display, error)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10294 Display *display;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10295 XErrorEvent *error;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10296 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10297 XGetErrorText (display, error->error_code,
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10298 XSTRING (x_error_message_string)->data,
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10299 X_ERROR_MESSAGE_SIZE);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10300 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10301
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10302 /* 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
10303 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
10304 operating on.
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10305
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10306 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
10307 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
10308 stored in x_error_message_string.
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10309
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10310 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
10311 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
10312
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10313 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
10314
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10315 void x_check_errors ();
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10316 static Lisp_Object x_catch_errors_unwind ();
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10317
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10318 int
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10319 x_catch_errors (dpy)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10320 Display *dpy;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10321 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10322 int count = specpdl_ptr - specpdl;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10323
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10324 /* 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
10325 XSync (dpy, False);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10326
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10327 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
10328
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10329 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
10330 XSTRING (x_error_message_string)->data[0] = 0;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10331
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10332 return count;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10333 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10334
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10335 /* 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
10336
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10337 static Lisp_Object
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10338 x_catch_errors_unwind (old_val)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10339 Lisp_Object old_val;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10340 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10341 x_error_message_string = old_val;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10342 return Qnil;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10343 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10344
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10345 /* 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
10346 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
10347 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
10348
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10349 void
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10350 x_check_errors (dpy, format)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10351 Display *dpy;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10352 char *format;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10353 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10354 /* 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
10355 XSync (dpy, False);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10356
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10357 if (XSTRING (x_error_message_string)->data[0])
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10358 error (format, XSTRING (x_error_message_string)->data);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10359 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10360
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10361 /* 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
10362 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
10363
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10364 int
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10365 x_had_errors_p (dpy)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10366 Display *dpy;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10367 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10368 /* 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
10369 XSync (dpy, False);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10370
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10371 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
10372 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10373
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10374 /* 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
10375
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10376 void
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10377 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
10378 Display *dpy;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10379 {
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10380 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
10381 }
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10382
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10383 /* 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
10384 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
10385 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
10386 the corresponding call to x_catch_errors. */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10387
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10388 void
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10389 x_uncatch_errors (dpy, count)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10390 Display *dpy;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10391 int count;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10392 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10393 unbind_to (count, Qnil);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10394 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10395
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10396 #if 0
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10397 static unsigned int x_wire_count;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10398 x_trace_wire ()
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10399 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10400 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
10401 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10402 #endif /* ! 0 */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10403
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10404
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10405 /* 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
10406 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
10407 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
10408 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
10409 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
10410
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10411 static SIGTYPE
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10412 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
10413 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
10414 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10415 #ifdef USG
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10416 /* USG systems forget handlers when they are used;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10417 must reestablish each time */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10418 signal (signalnum, x_connection_signal);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10419 #endif /* USG */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10420 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10421
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 555
diff changeset
10422 /* Handling X errors. */
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 555
diff changeset
10423
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10424 /* 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
10425
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 555
diff changeset
10426 static SIGTYPE
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10427 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
10428 Display *display;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10429 char *error_message;
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 555
diff changeset
10430 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10431 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
10432 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
10433
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
10434 /* 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
10435
17825
281d99590839 (dumpglyphs): Draw glyphs one by one if the font for
Kenichi Handa <handa@m17n.org>
parents: 17720
diff changeset
10436 #ifdef USE_X_TOOLKIT
16179
7f8ce4d3e955 (x_connection_closed): Call XtCloseDisplay.
Richard M. Stallman <rms@gnu.org>
parents: 16104
diff changeset
10437 XtCloseDisplay (display);
17825
281d99590839 (dumpglyphs): Draw glyphs one by one if the font for
Kenichi Handa <handa@m17n.org>
parents: 17720
diff changeset
10438 #endif
16179
7f8ce4d3e955 (x_connection_closed): Call XtCloseDisplay.
Richard M. Stallman <rms@gnu.org>
parents: 16104
diff changeset
10439
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
10440 dpyinfo->display = 0;
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
10441
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10442 /* 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
10443 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
10444 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
10445 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10446 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
10447 minibuf_frame
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10448 = 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
10449 if (FRAME_X_P (XFRAME (frame))
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
10450 && FRAME_X_P (XFRAME (minibuf_frame))
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
10451 && ! EQ (frame, minibuf_frame)
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
10452 && 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
10453 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
10454 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10455
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10456 /* 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
10457 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
10458 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
10459 FOR_EACH_FRAME (tail, frame)
10921
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
10460 if (FRAME_X_P (XFRAME (frame))
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
10461 && 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
10462 {
0d37c1e81c0d (x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents: 11901
diff changeset
10463 /* 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
10464 trying to find a replacement. */
0d37c1e81c0d (x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents: 11901
diff changeset
10465 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
10466 Fdelete_frame (frame, Qt);
0d37c1e81c0d (x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents: 11901
diff changeset
10467 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10468
13727
9eb09adbcb38 (x_connection_closed): Don't delete dpyinfo if it's null.
Karl Heuer <kwzh@gnu.org>
parents: 13633
diff changeset
10469 if (dpyinfo)
9eb09adbcb38 (x_connection_closed): Don't delete dpyinfo if it's null.
Karl Heuer <kwzh@gnu.org>
parents: 13633
diff changeset
10470 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
10471
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10472 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
10473 {
15515
69257ac25af4 (x_connection_closed): Add newline when printing error message on stderr.
Richard M. Stallman <rms@gnu.org>
parents: 15514
diff changeset
10474 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
10475 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
10476 exit (70);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10477 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10478
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10479 /* 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
10480 #ifdef SIGIO
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10481 sigunblock (sigmask (SIGIO));
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10482 #endif
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10483 sigunblock (sigmask (SIGALRM));
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10484 TOTALLY_UNBLOCK_INPUT;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10485
15526
926ef4afc174 (x_connection_closed): Call clear_waiting_for_input.
Richard M. Stallman <rms@gnu.org>
parents: 15521
diff changeset
10486 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
10487 error ("%s", error_message);
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 555
diff changeset
10488 }
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 555
diff changeset
10489
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10490 /* 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
10491 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
10492 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
10493
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10494 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
10495 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
10496 Display *display;
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
10497 XErrorEvent *error;
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
10498 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10499 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
10500
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
10501 /* 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
10502 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
10503
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
10504 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
10505 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
10506 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
10507 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
10508 }
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
10509
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10510 /* 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
10511 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
10512
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10513 static int
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10514 x_error_handler (display, error)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10515 Display *display;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10516 XErrorEvent *error;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10517 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10518 if (! NILP (x_error_message_string))
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10519 x_error_catcher (display, error);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10520 else
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10521 x_error_quitter (display, error);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10522 return 0;
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10523 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10524
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10525 /* 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
10526 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
10527 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
10528
1875
f569bc4e9b8f * xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents: 1841
diff changeset
10529 static int
f569bc4e9b8f * xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents: 1841
diff changeset
10530 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
10531 Display *display;
f569bc4e9b8f * xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents: 1841
diff changeset
10532 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10533 char buf[256];
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10534
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10535 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
10536 x_connection_closed (display, buf);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10537 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
10538 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10539
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
10540 /* 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
10541
8291
9c6ddd14996b (struct font_info): New field full_name.
Richard M. Stallman <rms@gnu.org>
parents: 8279
diff changeset
10542 /* 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
10543 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
10544 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
10545 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
10546
3076
e3b3c67cf203 Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents: 3066
diff changeset
10547 Lisp_Object
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10548 x_new_font (f, fontname)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10549 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10550 register char *fontname;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10551 {
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10552 struct font_info *fontp
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10553 = fs_load_font (f, FRAME_X_FONT_TABLE (f), CHARSET_ASCII, fontname, -1);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10554
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10555 if (!fontp)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10556 return Qnil;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10557
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10558 f->output_data.x->font = (XFontStruct *) (fontp->font);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10559 f->output_data.x->font_baseline
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10560 = (f->output_data.x->font->ascent + fontp->baseline_offset);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10561 f->output_data.x->fontset = -1;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10562
9167
8ad448b29c1c (x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents: 9101
diff changeset
10563 /* 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
10564 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
10565 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
10566 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
10567 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
10568 }
8ad448b29c1c (x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents: 9101
diff changeset
10569 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
10570 {
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
10571 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
10572 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
10573 }
9167
8ad448b29c1c (x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents: 9101
diff changeset
10574
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10575 /* 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
10576 if (FRAME_X_WINDOW (f) != 0)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10577 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
10578 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
10579 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
10580 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
10581 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
10582 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
10583 f->output_data.x->font->fid);
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10584
6767
8fbcee1c2059 (stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents: 6757
diff changeset
10585 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
10586 x_set_window_size (f, 0, f->width, f->height);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10587 }
6767
8fbcee1c2059 (stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents: 6757
diff changeset
10588 else
8fbcee1c2059 (stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents: 6757
diff changeset
10589 /* 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
10590 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
10591 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
10592
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10593 return build_string (fontp->full_name);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10594 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10595
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10596 /* 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
10597 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
10598 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
10599 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
10600
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10601 Lisp_Object
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10602 x_new_fontset (f, fontsetname)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10603 struct frame *f;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10604 char *fontsetname;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10605 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10606 int fontset = fs_query_fontset (f, fontsetname);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10607 struct fontset_info *fontsetp;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10608 Lisp_Object result;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10609
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10610 if (fontset < 0)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10611 return Qnil;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10612
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
10613 if (f->output_data.x->fontset == fontset)
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
10614 /* 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
10615 to do. */
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
10616 return build_string (fontsetname);
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
10617
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10618 fontsetp = FRAME_FONTSET_DATA (f)->fontset_table[fontset];
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10619
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10620 if (!fontsetp->fontname[CHARSET_ASCII])
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10621 /* This fontset doesn't contain ASCII font. */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10622 return Qnil;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10623
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10624 result = x_new_font (f, fontsetp->fontname[CHARSET_ASCII]);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10625
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10626 if (!STRINGP (result))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10627 /* Can't load ASCII font. */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10628 return Qnil;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10629
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10630 /* 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
10631 f->output_data.x->fontset = fontset;
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
10632 FS_LOAD_FONT (f, FRAME_X_FONT_TABLE (f),
24223
c7888c86b9e1 (x_new_fontset): For ASCII font, don't use the font name
Kenichi Handa <handa@m17n.org>
parents: 24164
diff changeset
10633 CHARSET_ASCII, fontsetp->fontname[CHARSET_ASCII], fontset);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10634
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10635 return build_string (fontsetname);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10636 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10637
14826
eec0abb31126 Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 14801
diff changeset
10638 /* Calculate the absolute position in frame F
eec0abb31126 Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 14801
diff changeset
10639 from its current recorded position values and gravity. */
eec0abb31126 Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 14801
diff changeset
10640
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
10641 void
7264
a701bffa0f9d (x_calc_absolute_position): Use size_hint_flags.
Richard M. Stallman <rms@gnu.org>
parents: 7262
diff changeset
10642 x_calc_absolute_position (f)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10643 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10644 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10645 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
10646 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
10647 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
10648 int this_window;
507a45c7e911 (x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents: 11807
diff changeset
10649
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10650 /* 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
10651 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
10652 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
10653 return;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10654
11896
507a45c7e911 (x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents: 11807
diff changeset
10655 #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
10656 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
10657 #else
507a45c7e911 (x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents: 11807
diff changeset
10658 this_window = FRAME_X_WINDOW (f);
507a45c7e911 (x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents: 11807
diff changeset
10659 #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
10660
70247ce8b381 (x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents: 4493
diff changeset
10661 /* 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
10662 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
10663 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
10664 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
10665 {
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10666 int count;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10667
4630
70247ce8b381 (x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents: 4493
diff changeset
10668 BLOCK_INPUT;
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10669 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
10670 while (1)
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10671 {
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10672 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
10673 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
10674
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10675 /* 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
10676 this_window,
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10677 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
10678
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10679 /* 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
10680 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
10681
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10682 /* Child of win. */
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10683 &child);
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10684 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
10685 {
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10686 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
10687 Window *newchildren;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10688 int nchildren;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10689
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10690 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
10691 &newparent, &newchildren, &nchildren))
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10692 break;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10693
23107
44eda932afcf (x_calc_absolute_position): Cast argument to XFree, in
Karl Heuer <kwzh@gnu.org>
parents: 23095
diff changeset
10694 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
10695
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10696 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
10697 }
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10698 else
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10699 break;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10700 }
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10701
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
10702 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
10703 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
10704 }
70247ce8b381 (x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents: 4493
diff changeset
10705
70247ce8b381 (x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents: 4493
diff changeset
10706 /* 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
10707 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
10708 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
10709 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
10710 - 2 * f->output_data.x->border_width - win_x
eec0abb31126 Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 14801
diff changeset
10711 - PIXEL_WIDTH (f)
eec0abb31126 Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 14801
diff changeset
10712 + f->output_data.x->left_pos);
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10713
7262
68fc80bf10df (x_wm_set_size_hint): Don't try to handle negative positions.
Richard M. Stallman <rms@gnu.org>
parents: 7210
diff changeset
10714 if (flags & YNegative)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10715 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10716 int menubar_height = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10717
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10718 #ifdef USE_X_TOOLKIT
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10719 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
10720 menubar_height
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10721 = (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
10722 + 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
10723 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10724
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10725 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
10726 - 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
10727 - win_y
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10728 - PIXEL_HEIGHT (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10729 - menubar_height
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10730 + f->output_data.x->top_pos);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10731 }
14826
eec0abb31126 Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 14801
diff changeset
10732
7409
fe56a02838ba (x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents: 7346
diff changeset
10733 /* 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
10734 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
10735 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
10736 f->output_data.x->size_hint_flags &= ~ (XNegative | YNegative);
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
7409
fe56a02838ba (x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents: 7346
diff changeset
10739 /* 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
10740 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
10741 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
10742 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
10743 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
10744
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
10745 void
6934
e0ab4f59004e (dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents: 6883
diff changeset
10746 x_set_offset (f, xoff, yoff, change_gravity)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10747 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10748 register int xoff, yoff;
6934
e0ab4f59004e (dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents: 6883
diff changeset
10749 int change_gravity;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10750 {
11901
8ecc60a02138 (x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents: 11896
diff changeset
10751 int modified_top, modified_left;
8ecc60a02138 (x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents: 11896
diff changeset
10752
11988
a1ce6f699967 (x_set_offset): Distinguish CHANGE_GRAVITY < 0 case.
Karl Heuer <kwzh@gnu.org>
parents: 11953
diff changeset
10753 if (change_gravity > 0)
7409
fe56a02838ba (x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents: 7346
diff changeset
10754 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
10755 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
10756 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
10757 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
10758 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
10759 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
10760 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
10761 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
10762 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
10763 }
7264
a701bffa0f9d (x_calc_absolute_position): Use size_hint_flags.
Richard M. Stallman <rms@gnu.org>
parents: 7262
diff changeset
10764 x_calc_absolute_position (f);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10765
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10766 BLOCK_INPUT;
11915
e2ab839155e1 (XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents: 11904
diff changeset
10767 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
10768
17519
5aa7011aa3d5 (x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents: 17371
diff changeset
10769 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
10770 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
10771 #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
10772 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
10773 /* 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
10774 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
10775 if (change_gravity != 0)
11901
8ecc60a02138 (x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents: 11896
diff changeset
10776 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
10777 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
10778 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
10779 }
17519
5aa7011aa3d5 (x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents: 17371
diff changeset
10780 #endif
11901
8ecc60a02138 (x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents: 11896
diff changeset
10781
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10782 #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
10783 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
10784 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
10785 #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
10786 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
10787 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
10788 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10789 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10790 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10791
5825
b1f35db748d8 (x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 5753
diff changeset
10792 /* 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
10793 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
10794 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
10795 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
10796
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
10797 void
5825
b1f35db748d8 (x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 5753
diff changeset
10798 x_set_window_size (f, change_gravity, cols, rows)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10799 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
10800 int change_gravity;
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
10801 int cols, rows;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10802 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10803 #ifndef USE_X_TOOLKIT
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10804 int pixelwidth, pixelheight;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10805 #endif
14692
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
10806
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
10807 BLOCK_INPUT;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10808
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
10809 #ifdef USE_X_TOOLKIT
7415
fbea5637a4b4 (x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents: 7409
diff changeset
10810 {
fbea5637a4b4 (x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents: 7409
diff changeset
10811 /* 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
10812 call to XtSetValues within EmacsFrameSetCharSize.
fbea5637a4b4 (x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents: 7409
diff changeset
10813 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
10814 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
10815 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
10816 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
10817 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
10818 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
10819 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
10820 }
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
10821
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
10822 #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
10823
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
10824 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
10825 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
10826 = (!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
10827 ? 0
8ad448b29c1c (x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents: 9101
diff changeset
10828 : 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
10829 ? 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
10830 : (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
10831 f->output_data.x->flags_areas_extra
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10832 = 2 * 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
10833 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
10834 pixelheight = CHAR_TO_PIXEL_HEIGHT (f, rows);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10835
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
10836 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
10837 x_wm_set_size_hint (f, (long) 0, 0);
8781
98741404d3e0 Delete X11 conditionals.
Richard M. Stallman <rms@gnu.org>
parents: 8724
diff changeset
10838
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
10839 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
10840 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
10841 pixelwidth, pixelheight);
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
10842
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
10843 /* 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
10844 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
10845 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
10846 ConfigureNotify event gets here.
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10847
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10848 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
10849 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
10850 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
10851 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
10852 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
10853
1c02364724aa (x_set_window_size): When calling change_frame_size, specify 1 for DELAY.
Richard M. Stallman <rms@gnu.org>
parents: 25101
diff changeset
10854 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
10855 a BLOCK_INPUT. */
1c02364724aa (x_set_window_size): When calling change_frame_size, specify 1 for DELAY.
Richard M. Stallman <rms@gnu.org>
parents: 25101
diff changeset
10856 change_frame_size (f, rows, cols, 0, 1);
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
10857 PIXEL_WIDTH (f) = pixelwidth;
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
10858 PIXEL_HEIGHT (f) = pixelheight;
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
10859
14692
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
10860 /* 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
10861 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
10862 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
10863 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
10864 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
10865
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
10866 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
10867
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
10868 #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
10869
7651
1569a13efdcd (x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents: 7602
diff changeset
10870 /* 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
10871 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
10872
14692
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
10873 /* 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
10874 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
10875 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
10876 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
10877 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
10878
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10879 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10880 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10881
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
10882 /* Mouse warping. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10883
7026
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
10884 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10885 x_set_mouse_position (f, x, y)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10886 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10887 int x, y;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10888 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10889 int pix_x, pix_y;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10890
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
10891 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
10892 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
10893
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
10894 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
10895 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
10896
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
10897 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
10898 if (pix_y > PIXEL_HEIGHT (f)) pix_y = PIXEL_HEIGHT (f);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10899
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10900 BLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10901
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
10902 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
10903 0, 0, 0, 0, pix_x, pix_y);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10904 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10905 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10906
7026
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
10907 /* 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
10908
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
10909 void
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
10910 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
10911 struct frame *f;
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
10912 int pix_x, pix_y;
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
10913 {
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
10914 BLOCK_INPUT;
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
10915
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
10916 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
10917 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
10918 UNBLOCK_INPUT;
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
10919 }
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
10920
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
10921 /* focus shifting, raising and lowering. */
7026
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
10922
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
10923 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10924 x_focus_on_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10925 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10926 {
5156
fd78458b8c43 (XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents: 5018
diff changeset
10927 #if 0 /* This proves to be unpleasant. */
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10928 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
10929 #endif
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
10930 #if 0
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
10931 /* 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
10932 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
10933 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
10934 XSetInputFocus (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10935 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
10936 #endif /* ! 0 */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10937 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10938
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
10939 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10940 x_unfocus_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10941 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10942 {
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
10943 #if 0
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10944 /* 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
10945 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
10946 XSetInputFocus (FRAME_X_DISPLAY (f), PointerRoot,
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10947 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
10948 #endif /* ! 0 */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10949 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10950
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10951 /* Raise frame F. */
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10952
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
10953 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10954 x_raise_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10955 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10956 {
1658
452ba03935d7 * xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents: 1530
diff changeset
10957 if (f->async_visible)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10958 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10959 BLOCK_INPUT;
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10960 #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
10961 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
10962 #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
10963 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
10964 #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
10965 XFlush (FRAME_X_DISPLAY (f));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10966 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10967 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10968 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10969
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10970 /* Lower frame F. */
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10971
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
10972 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10973 x_lower_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10974 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10975 {
1658
452ba03935d7 * xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents: 1530
diff changeset
10976 if (f->async_visible)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10977 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10978 BLOCK_INPUT;
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10979 #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
10980 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
10981 #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
10982 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
10983 #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
10984 XFlush (FRAME_X_DISPLAY (f));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10985 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10986 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10987 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10988
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10989 static void
14411
bac274f178b0 (XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents: 14305
diff changeset
10990 XTframe_raise_lower (f, raise_flag)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10991 FRAME_PTR f;
14411
bac274f178b0 (XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents: 14305
diff changeset
10992 int raise_flag;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10993 {
14411
bac274f178b0 (XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents: 14305
diff changeset
10994 if (raise_flag)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10995 x_raise_frame (f);
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10996 else
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10997 x_lower_frame (f);
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10998 }
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
10999
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
11000 /* Change of visibility. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11001
12192
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
11002 /* 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
11003 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
11004 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
11005 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
11006 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
11007 finishes with it. */
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
11008
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
11009 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11010 x_make_frame_visible (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11011 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11012 {
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11013 Lisp_Object type;
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
11014 int original_top, original_left;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11015
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
11016 BLOCK_INPUT;
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
11017
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11018 type = x_icon_type (f);
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11019 if (!NILP (type))
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11020 x_bitmap_icon (f, type);
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
11021
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11022 if (! FRAME_VISIBLE_P (f))
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11023 {
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
11024 /* 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
11025 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
11026 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
11027 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
11028 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
11029 && ! 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
11030 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
11031
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
11032 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
11033
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
11034 if (! EQ (Vx_no_window_manager, Qt))
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11035 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
11036 #ifdef USE_X_TOOLKIT
7167
2fa74c48e4e5 (x_make_frame_visible): Use XtMapWidget, not XtPopup.
Richard M. Stallman <rms@gnu.org>
parents: 7128
diff changeset
11037 /* 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
11038 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
11039 #else /* not USE_X_TOOLKIT */
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
11040 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
11041 #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
11042 #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
11043 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
11044 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
11045 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
11046 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
11047 #endif
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
11048 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11049
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
11050 XFlush (FRAME_X_DISPLAY (f));
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
11051
7959
224440646fa7 (make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents: 7935
diff changeset
11052 /* 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
11053 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
11054 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
11055 {
224440646fa7 (make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents: 7935
diff changeset
11056 Lisp_Object frame;
9337
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
11057 int count = input_signal_count;
18528
73f4d9258f04 (x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents: 18347
diff changeset
11058 /* 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
11059 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
11060 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
11061 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
11062
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
11063 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
11064 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
11065
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
11066 /* This must come after we set COUNT. */
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
11067 UNBLOCK_INPUT;
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
11068
22907
43e290c6fb19 (x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents: 22773
diff changeset
11069 /* 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
11070
18008
d25d2472df51 (XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents: 17963
diff changeset
11071 /* 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
11072 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
11073 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
11074 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
11075
73f4d9258f04 (x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents: 18347
diff changeset
11076 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
11077 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
11078 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
11079
18630
3e414b9da546 (x_make_frame_visible): Don't move the frame
Richard M. Stallman <rms@gnu.org>
parents: 18528
diff changeset
11080 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
11081 && 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
11082 && previously_visible)
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
11083 {
22907
43e290c6fb19 (x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents: 22773
diff changeset
11084 Drawable rootw;
43e290c6fb19 (x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents: 22773
diff changeset
11085 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
11086 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
11087
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
11088 BLOCK_INPUT;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
11089
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11090 /* 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
11091 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
11092 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
11093 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
11094 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
11095 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
11096 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
11097 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
11098 &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
11099
43e290c6fb19 (x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents: 22773
diff changeset
11100 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
11101 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
11102 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
11103
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
11104 UNBLOCK_INPUT;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
11105 }
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
11106
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
11107 XSETFRAME (frame, f);
9337
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
11108
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
11109 while (1)
8098
e44c31d682b1 (x_draw_box): Use curs_x and curs_y, not f->cursor_[xy].
Richard M. Stallman <rms@gnu.org>
parents: 8036
diff changeset
11110 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
11111 x_sync (f);
9337
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
11112 /* Once we have handled input events,
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
11113 we should have received the MapNotify if one is coming.
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
11114 So if we have not got it yet, stop looping.
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
11115 Some window managers make their own decisions
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
11116 about visibility. */
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
11117 if (input_signal_count != count)
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
11118 break;
8609
145a583d9128 (x_make_frame_visible): Raise a signal to cause the pending X I/O to be read.
Karl Heuer <kwzh@gnu.org>
parents: 8567
diff changeset
11119 /* Machines that do polling rather than SIGIO have been observed
8634
187df0aff719 (x_make_frame_visible): Call signal handler directly.
Karl Heuer <kwzh@gnu.org>
parents: 8609
diff changeset
11120 to go into a busy-wait here. So we'll fake an alarm signal
187df0aff719 (x_make_frame_visible): Call signal handler directly.
Karl Heuer <kwzh@gnu.org>
parents: 8609
diff changeset
11121 to let the handler know that there's something to be read.
187df0aff719 (x_make_frame_visible): Call signal handler directly.
Karl Heuer <kwzh@gnu.org>
parents: 8609
diff changeset
11122 We used to raise a real alarm, but it seems that the handler
187df0aff719 (x_make_frame_visible): Call signal handler directly.
Karl Heuer <kwzh@gnu.org>
parents: 8609
diff changeset
11123 isn't always enabled here. This is probably a bug. */
8682
42f95b1368ea (x_make_frame_visible): Call input_polling_used.
Richard M. Stallman <rms@gnu.org>
parents: 8652
diff changeset
11124 if (input_polling_used ())
8652
c2c1a477ddd5 Include keyboard.h.
Richard M. Stallman <rms@gnu.org>
parents: 8634
diff changeset
11125 {
c2c1a477ddd5 Include keyboard.h.
Richard M. Stallman <rms@gnu.org>
parents: 8634
diff changeset
11126 /* It could be confusing if a real alarm arrives while processing
c2c1a477ddd5 Include keyboard.h.
Richard M. Stallman <rms@gnu.org>
parents: 8634
diff changeset
11127 the fake one. Turn it off and let the handler reset it. */
c2c1a477ddd5 Include keyboard.h.
Richard M. Stallman <rms@gnu.org>
parents: 8634
diff changeset
11128 alarm (0);
20364
8e58003a8d02 (x_make_frame_visible): Give dummy arg to
Kenichi Handa <handa@m17n.org>
parents: 20182
diff changeset
11129 input_poll_signal (0);
8652
c2c1a477ddd5 Include keyboard.h.
Richard M. Stallman <rms@gnu.org>
parents: 8634
diff changeset
11130 }
9337
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
11131 /* Once we have handled input events,
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
11132 we should have received the MapNotify if one is coming.
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
11133 So if we have not got it yet, stop looping.
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
11134 Some window managers make their own decisions
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
11135 about visibility. */
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
11136 if (input_signal_count != count)
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
11137 break;
8098
e44c31d682b1 (x_draw_box): Use curs_x and curs_y, not f->cursor_[xy].
Richard M. Stallman <rms@gnu.org>
parents: 8036
diff changeset
11138 }
7959
224440646fa7 (make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents: 7935
diff changeset
11139 FRAME_SAMPLE_VISIBILITY (f);
224440646fa7 (make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents: 7935
diff changeset
11140 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11141 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11142
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11143 /* Change from mapped state to withdrawn state. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11144
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
11145 /* Make the frame visible (mapped and not iconified). */
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
11146
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
11147 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11148 x_make_frame_invisible (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11149 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11150 {
7602
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
11151 Window window;
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
11152
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
11153 #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
11154 /* 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
11155 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
11156 #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
11157 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
11158 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11159
3284
a47979ffad1e (XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents: 3282
diff changeset
11160 /* 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
11161 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
11162 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
11163
6983
b18e5c09d7c3 (XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents: 6941
diff changeset
11164 #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
11165 if (! f->async_visible && ! f->async_iconified)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11166 return;
6983
b18e5c09d7c3 (XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents: 6941
diff changeset
11167 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11168
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11169 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
11170
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
11171 /* 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
11172 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
11173 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
11174 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
11175 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
11176 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
11177
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
11178 #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
11179
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
11180 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
11181 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
11182 {
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
11183 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
11184 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
11185 }
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
11186 #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
11187
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
11188 /* Tell the window manager what we're going to do. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11189 if (! EQ (Vx_no_window_manager, Qt))
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11190 {
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
11191 XEvent unmap;
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
11192
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
11193 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
11194 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
11195 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
11196 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
11197 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
11198 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
11199 False,
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11200 SubstructureRedirectMaskSubstructureNotifyMask,
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
11201 &unmap))
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
11202 {
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
11203 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
11204 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
11205 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11206 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11207
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
11208 /* 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
11209 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
11210 #endif /* ! defined (HAVE_X11R4) */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11211
6983
b18e5c09d7c3 (XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents: 6941
diff changeset
11212 /* 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
11213 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
11214 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
11215 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
11216 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
11217 f->visible = 0;
b18e5c09d7c3 (XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents: 6941
diff changeset
11218 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
11219 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
11220 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
11221
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
11222 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
11223
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11224 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11225 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11226
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11227 /* Change window state from mapped to iconified. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11228
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
11229 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11230 x_iconify_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11231 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11232 {
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
11233 int result;
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11234 Lisp_Object type;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11235
3284
a47979ffad1e (XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents: 3282
diff changeset
11236 /* 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
11237 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
11238 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
11239
1658
452ba03935d7 * xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents: 1530
diff changeset
11240 if (f->async_iconified)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11241 return;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11242
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
11243 BLOCK_INPUT;
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
11244
13627
8873aa3451dd (XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents: 13598
diff changeset
11245 FRAME_SAMPLE_VISIBILITY (f);
8873aa3451dd (XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents: 13598
diff changeset
11246
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11247 type = x_icon_type (f);
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11248 if (!NILP (type))
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
11249 x_bitmap_icon (f, type);
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
11250
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
11251 #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
11252
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
11253 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
11254 {
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
11255 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
11256 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
11257 /* 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
11258 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
11259 /* 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
11260 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
11261 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
11262 f->iconified = 1;
16753
ab63a77c3a23 (x_iconify_frame): Clear visible when we set iconified.
Richard M. Stallman <rms@gnu.org>
parents: 16491
diff changeset
11263 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
11264 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
11265 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
11266 UNBLOCK_INPUT;
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
11267 return;
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
11268 }
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
11269
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
11270 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
11271 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
11272 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
11273 UNBLOCK_INPUT;
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
11274
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
11275 if (!result)
7602
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
11276 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
11277
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
11278 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
11279 f->async_visible = 0;
ab63a77c3a23 (x_iconify_frame): Clear visible when we set iconified.
Richard M. Stallman <rms@gnu.org>
parents: 16491
diff changeset
11280
5740
48da4ed089e9 (x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents: 5737
diff changeset
11281
48da4ed089e9 (x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents: 5737
diff changeset
11282 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
11283 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
11284 UNBLOCK_INPUT;
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
11285 #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
11286
7738
a810335742bb (x_iconify_frame): Call x_set_offset,
Richard M. Stallman <rms@gnu.org>
parents: 7706
diff changeset
11287 /* 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
11288 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
11289 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
11290 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
11291
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
11292 /* 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
11293 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
11294
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
11295 /* 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
11296 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
11297 {
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
11298 XEvent message;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
11299
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
11300 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
11301 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
11302 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
11303 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
11304 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
11305
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
11306 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
11307 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
11308 False,
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
11309 SubstructureRedirectMask | SubstructureNotifyMask,
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
11310 &message))
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11311 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11312 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
11313 error ("Can't notify window manager of iconification");
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11314 }
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
11315 }
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
11316
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
11317 /* 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
11318 IconicState. */
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
11319 x_wm_set_window_state (f, IconicState);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11320
4304
b5014da888a8 (x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents: 4277
diff changeset
11321 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
11322 {
b5014da888a8 (x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents: 4277
diff changeset
11323 /* 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
11324 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
11325 }
b5014da888a8 (x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents: 4277
diff changeset
11326
1658
452ba03935d7 * xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents: 1530
diff changeset
11327 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
11328 f->async_visible = 0;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11329
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
11330 XFlush (FRAME_X_DISPLAY (f));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11331 UNBLOCK_INPUT;
5740
48da4ed089e9 (x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents: 5737
diff changeset
11332 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11333 }
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
11334
1810
bf618128d973 * xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents: 1803
diff changeset
11335 /* 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
11336
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
11337 void
1810
bf618128d973 * xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents: 1803
diff changeset
11338 x_destroy_window (f)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11339 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11340 {
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
11341 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
11342
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11343 BLOCK_INPUT;
1810
bf618128d973 * xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents: 1803
diff changeset
11344
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
11345 /* 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
11346 commands to the X server. */
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
11347 if (dpyinfo->display != 0)
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
11348 {
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
11349 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
11350 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
11351 #ifdef HAVE_X_I18N
34db919835d3 (x_destroy_window) [HAVE_X_I18N]: Free xic and xim of frame.
Richard M. Stallman <rms@gnu.org>
parents: 14826
diff changeset
11352 if (FRAME_XIM (f))
34db919835d3 (x_destroy_window) [HAVE_X_I18N]: Free xic and xim of frame.
Richard M. Stallman <rms@gnu.org>
parents: 14826
diff changeset
11353 {
34db919835d3 (x_destroy_window) [HAVE_X_I18N]: Free xic and xim of frame.
Richard M. Stallman <rms@gnu.org>
parents: 14826
diff changeset
11354 XDestroyIC (FRAME_XIC (f));
14942
3432e5570488 (x_destroy_window): Do call XCloseIM if X11R6.
Richard M. Stallman <rms@gnu.org>
parents: 14921
diff changeset
11355 #if ! defined (SOLARIS2) || defined (HAVE_X11R6)
3432e5570488 (x_destroy_window): Do call XCloseIM if X11R6.
Richard M. Stallman <rms@gnu.org>
parents: 14921
diff changeset
11356 /* This line causes crashes on Solaris with Openwin,
3432e5570488 (x_destroy_window): Do call XCloseIM if X11R6.
Richard M. Stallman <rms@gnu.org>
parents: 14921
diff changeset
11357 due to an apparent bug in XCloseIM.
3432e5570488 (x_destroy_window): Do call XCloseIM if X11R6.
Richard M. Stallman <rms@gnu.org>
parents: 14921
diff changeset
11358 X11R6 seems not to have the bug. */
14830
34db919835d3 (x_destroy_window) [HAVE_X_I18N]: Free xic and xim of frame.
Richard M. Stallman <rms@gnu.org>
parents: 14826
diff changeset
11359 XCloseIM (FRAME_XIM (f));
14921
5a1524631bca (x_destroy_window) [SOLARIS2]: Don't free the IC or IM.
Richard M. Stallman <rms@gnu.org>
parents: 14896
diff changeset
11360 #endif
14830
34db919835d3 (x_destroy_window) [HAVE_X_I18N]: Free xic and xim of frame.
Richard M. Stallman <rms@gnu.org>
parents: 14826
diff changeset
11361 }
34db919835d3 (x_destroy_window) [HAVE_X_I18N]: Free xic and xim of frame.
Richard M. Stallman <rms@gnu.org>
parents: 14826
diff changeset
11362 #endif
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
11363 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
11364 #ifdef USE_X_TOOLKIT
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11365 if (f->output_data.x->widget)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11366 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
11367 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
11368 #endif /* USE_X_TOOLKIT */
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
11369
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
11370 free_frame_faces (f);
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
11371 XFlush (FRAME_X_DISPLAY (f));
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
11372 }
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
11373
17575
3f073536c09a Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17574
diff changeset
11374 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
11375 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
11376
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11377 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
11378 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
11379 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
11380 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
11381 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
11382 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
11383 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
11384 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
11385
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
11386 dpyinfo->reference_count--;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
11387
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
11388 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
11389 {
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
11390 dpyinfo->mouse_face_beg_row
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
11391 = dpyinfo->mouse_face_beg_col = -1;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
11392 dpyinfo->mouse_face_end_row
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
11393 = dpyinfo->mouse_face_end_col = -1;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
11394 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
11395 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
11396 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
11397 }
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
11398
1810
bf618128d973 * xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents: 1803
diff changeset
11399 UNBLOCK_INPUT;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11400 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11401
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
11402 /* Setting window manager hints. */
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
11403
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
11404 /* 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
11405 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
11406 that the window now has.
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
11407 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
11408 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
11409
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
11410 void
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
11411 x_wm_set_size_hint (f, flags, user_position)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11412 struct frame *f;
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
11413 long flags;
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
11414 int user_position;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11415 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11416 XSizeHints size_hints;
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
11417
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
11418 #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
11419 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
11420 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
11421 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
11422 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
11423 #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
11424 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
11425 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11426
7187
ca0102511d80 (x_wm_set_size_hint): Don't set PMaxSize.
Richard M. Stallman <rms@gnu.org>
parents: 7169
diff changeset
11427 /* 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
11428 size_hints.flags = PResizeInc | PMinSize /* | PMaxSize */;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11429
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11430 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
11431 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
11432
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
11433 #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
11434 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
11435 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
11436 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
11437 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
11438 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
11439 #else /* not USE_X_TOOLKIT */
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11440 size_hints.height = PIXEL_HEIGHT (f);
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11441 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
11442 #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
11443
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11444 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
11445 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
11446 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
11447 = 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
11448 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
11449 = 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
11450
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11451 /* Calculate the base and minimum sizes.
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11452
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11453 (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
11454 Instead we copy the values that the widgets are using, below.) */
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11455 #ifndef USE_X_TOOLKIT
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
11456 {
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
11457 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
11458 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
11459
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
11460 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
11461 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
11462
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
11463 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
11464
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
11465 /* 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
11466 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
11467 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
11468 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
11469 zero-row, zero-column frame.
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
11470
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
11471 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
11472 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
11473 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
11474
cd3d59155bf7 * xterm.c (x_wm_set_size_hint): Set the base_width and base_height
Jim Blandy <jimb@redhat.com>
parents: 1077
diff changeset
11475 #ifdef HAVE_X11R4
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
11476 size_hints.flags |= PBaseSize;
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
11477 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
11478 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
11479 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
11480 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
11481 #else
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
11482 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
11483 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
11484 #endif
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
11485 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11486
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11487 /* 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
11488 if (flags)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11489 {
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11490 size_hints.flags |= flags;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11491 goto no_read;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11492 }
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11493 #endif /* not USE_X_TOOLKIT */
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11494
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11495 {
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11496 XSizeHints hints; /* Sometimes I hate X Windows... */
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11497 long supplied_return;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11498 int value;
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
11499
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
11500 #ifdef HAVE_X11R4
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11501 value = XGetWMNormalHints (FRAME_X_DISPLAY (f), window, &hints,
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11502 &supplied_return);
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
11503 #else
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11504 value = XGetNormalHints (FRAME_X_DISPLAY (f), window, &hints);
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11505 #endif
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11506
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11507 #ifdef USE_X_TOOLKIT
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11508 size_hints.base_height = hints.base_height;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11509 size_hints.base_width = hints.base_width;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11510 size_hints.min_height = hints.min_height;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11511 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
11512 #endif
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
11513
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11514 if (flags)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11515 size_hints.flags |= flags;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11516 else
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11517 {
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11518 if (value == 0)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11519 hints.flags = 0;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11520 if (hints.flags & PSize)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11521 size_hints.flags |= PSize;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11522 if (hints.flags & PPosition)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11523 size_hints.flags |= PPosition;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11524 if (hints.flags & USPosition)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11525 size_hints.flags |= USPosition;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11526 if (hints.flags & USSize)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11527 size_hints.flags |= USSize;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11528 }
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11529 }
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11530
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11531 #ifndef USE_X_TOOLKIT
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
11532 no_read:
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11533 #endif
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
11534
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
11535 #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
11536 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
11537 size_hints.flags |= PWinGravity;
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
11538
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
11539 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
11540 {
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
11541 size_hints.flags &= ~ PPosition;
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
11542 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
11543 }
4777
21ed9c9bb210 (w_wn_set_size_hint): Make recent window gravity addition
Brian Fox <bfox@gnu.org>
parents: 4696
diff changeset
11544 #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
11545
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
11546 #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
11547 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
11548 #else
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
11549 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
11550 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11551 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11552
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11553 /* Used for IconicState or NormalState */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11554
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
11555 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11556 x_wm_set_window_state (f, state)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11557 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11558 int state;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11559 {
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
11560 #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
11561 Arg al[1];
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
11562
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
11563 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
11564 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
11565 #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
11566 Window window = FRAME_X_WINDOW (f);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11567
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11568 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
11569 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
11570
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11571 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
11572 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11573 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11574
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
11575 void
9542
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
11576 x_wm_set_icon_pixmap (f, pixmap_id)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11577 struct frame *f;
9542
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
11578 int pixmap_id;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11579 {
15117
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
11580 Pixmap icon_pixmap;
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
11581
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11582 #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
11583 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
11584 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11585
9542
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
11586 if (pixmap_id > 0)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
11587 {
15117
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
11588 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
11589 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
11590 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
11591 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
11592 {
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
11593 /* 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
11594 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
11595 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
11596 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
11597 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
11598 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
11599 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
11600 #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
11601 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
11602 #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
11603 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
11604 #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
11605 }
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11606
15117
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
11607 #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
11608
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
11609 {
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
11610 Arg al[1];
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
11611 XtSetArg (al[0], XtNiconPixmap, icon_pixmap);
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
11612 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
11613 }
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
11614
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
11615 #else /* not USE_X_TOOLKIT */
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
11616
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11617 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
11618 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
11619
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
11620 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11621 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11622
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
11623 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
11624 x_wm_set_icon_position (f, icon_x, icon_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 icon_x, icon_y;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11627 {
7806
ef7a60d59543 (x_wm_set_icon_position, x_wm_set_icon_pixmap):
Richard M. Stallman <rms@gnu.org>
parents: 7801
diff changeset
11628 #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
11629 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
11630 #else
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
11631 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
11632 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11633
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11634 f->output_data.x->wm_hints.flags |= IconPositionHint;
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11635 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
11636 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
11637
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
11638 XSetWMHints (FRAME_X_DISPLAY (f), window, &f->output_data.x->wm_hints);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11639 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11640
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11641
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11642 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11643 Fonts
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11644 ***********************************************************************/
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11645
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11646 /* 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
11647
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11648 struct font_info *
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11649 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
11650 FRAME_PTR f;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11651 int font_idx;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11652 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11653 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
11654 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11655
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11656
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11657 /* 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
11658 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
11659 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
11660 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
11661 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
11662
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11663 Lisp_Object
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11664 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
11665 FRAME_PTR f;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11666 Lisp_Object pattern;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11667 int size;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11668 int maxnames;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11669 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11670 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
11671 Lisp_Object tem, second_best;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11672 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
11673 int try_XLoadQueryFont = 0;
24633
c7d905dca6ba (x_list_fonts): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 24618
diff changeset
11674 int count;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11675
19447
34099ec680df (x_list_fonts): Adjusted for the name change of
Kenichi Handa <handa@m17n.org>
parents: 19276
diff changeset
11676 patterns = Fassoc (pattern, Valternate_fontname_alist);
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
11677 if (NILP (patterns))
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
11678 patterns = Fcons (pattern, Qnil);
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
11679
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
11680 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
11681 /* 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
11682 try_XLoadQueryFont = 1;
19062
9cc02044117d (x_list_fonts): Request at least 10 fonts by XListFonts.
Kenichi Handa <handa@m17n.org>
parents: 19060
diff changeset
11683
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
11684 for (; CONSP (patterns); patterns = XCONS (patterns)->cdr)
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11685 {
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11686 int num_fonts;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11687 char **names;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11688
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
11689 pattern = XCONS (patterns)->car;
19060
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
11690 /* 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
11691 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
11692 (((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
11693 */
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11694 if (f && (tem = XCONS (FRAME_X_DISPLAY_INFO (f)->name_list_element)->cdr,
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11695 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
11696 !NILP (list = Fassoc (key, tem))))
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11697 {
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11698 list = Fcdr_safe (list);
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11699 /* 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
11700 goto label_cached;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11701 }
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11702
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11703 /* 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
11704
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11705 BLOCK_INPUT;
24618
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
11706 count = x_catch_errors (dpy);
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
11707
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
11708 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
11709 {
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
11710 XFontStruct *font;
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
11711 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
11712
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
11713 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
11714 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
11715 {
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
11716 /* 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
11717 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
11718 font = NULL;
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
11719 x_clear_errors (dpy);
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
11720 }
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
11721
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
11722 if (font
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
11723 && 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
11724 {
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
11725 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
11726 int len = strlen (name);
22530
6d2e22a16952 (x_list_fonts): Keep alloca usage simple.
Karl Heuer <kwzh@gnu.org>
parents: 22522
diff changeset
11727 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
11728
23095
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
11729 /* 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
11730 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
11731 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
11732 if (len == 0)
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
11733 try_XLoadQueryFont = 0;
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
11734 else
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
11735 {
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
11736 num_fonts = 1;
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
11737 names = (char **) alloca (sizeof (char *));
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
11738 /* 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
11739 simple var. */
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
11740 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
11741 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
11742 XFree (name);
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
11743 }
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
11744 }
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
11745 else
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
11746 try_XLoadQueryFont = 0;
22943
5493321d4526 (x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 22907
diff changeset
11747
5493321d4526 (x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 22907
diff changeset
11748 if (font)
5493321d4526 (x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 22907
diff changeset
11749 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
11750 }
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
11751
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
11752 if (!try_XLoadQueryFont)
24618
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
11753 {
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
11754 /* 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
11755 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
11756 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
11757 &num_fonts);
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
11758 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
11759 {
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
11760 /* 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
11761 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
11762 names = NULL;
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
11763 x_clear_errors (dpy);
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
11764 }
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
11765 }
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
11766
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
11767 x_uncatch_errors (dpy, count);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11768 UNBLOCK_INPUT;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11769
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11770 if (names)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11771 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11772 int i;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11773
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11774 /* 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
11775 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
11776 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
11777 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11778 int width = 0;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11779 char *p = names[i];
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11780 int average_width = -1, dashes = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11781
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11782 /* 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
11783 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
11784 (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
11785 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
11786 ignore it. */
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11787 while (*p)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11788 if (*p++ == '-')
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11789 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11790 dashes++;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11791 if (dashes == 7) /* PIXEL_SIZE field */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11792 width = atoi (p);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11793 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
11794 average_width = atoi (p);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11795 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11796 if (dashes < 14 || average_width != 0)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11797 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11798 tem = build_string (names[i]);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11799 if (NILP (Fassoc (tem, list)))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11800 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11801 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
11802 && ((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
11803 (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
11804 >= 0))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11805 /* 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
11806 width of this font. */
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11807 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
11808 else
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11809 /* 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
11810 list = Fcons (Fcons (tem, Qnil), list);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11811 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11812 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11813 }
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
11814 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
11815 XFreeFontNames (names);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11816 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11817
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11818 /* 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
11819 if (f != NULL)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11820 XCONS (FRAME_X_DISPLAY_INFO (f)->name_list_element)->cdr
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11821 = Fcons (Fcons (key, list),
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11822 XCONS (FRAME_X_DISPLAY_INFO (f)->name_list_element)->cdr);
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11823
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11824 label_cached:
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11825 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
11826
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11827 newlist = second_best = Qnil;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11828 /* Make a list of the fonts that have the right width. */
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11829 for (; CONSP (list); list = XCONS (list)->cdr)
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11830 {
19060
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
11831 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
11832
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11833 tem = XCONS (list)->car;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11834
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11835 if (!CONSP (tem) || NILP (XCONS (tem)->car))
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11836 continue;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11837 if (!size)
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11838 {
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11839 newlist = Fcons (XCONS (tem)->car, newlist);
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11840 continue;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11841 }
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11842
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11843 if (!INTEGERP (XCONS (tem)->cdr))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11844 {
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11845 /* 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
11846 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
11847 XFontStruct *thisinfo;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11848
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11849 BLOCK_INPUT;
24618
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
11850 count = x_catch_errors (dpy);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11851 thisinfo = XLoadQueryFont (dpy,
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11852 XSTRING (XCONS (tem)->car)->data);
24618
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
11853 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
11854 {
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
11855 /* 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
11856 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
11857 thisinfo = NULL;
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
11858 x_clear_errors (dpy);
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
11859 }
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
11860 x_uncatch_errors (dpy, count);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11861 UNBLOCK_INPUT;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11862
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11863 if (thisinfo)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11864 {
19060
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
11865 XCONS (tem)->cdr
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
11866 = (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
11867 ? 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
11868 : 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
11869 XFreeFont (dpy, thisinfo);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11870 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11871 else
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11872 /* 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
11873 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
11874 as 0 not to try to open it again. */
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11875 XCONS (tem)->cdr = make_number (0);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11876 }
19060
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
11877
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
11878 found_size = XINT (XCONS (tem)->cdr);
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
11879 if (found_size == size)
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11880 newlist = Fcons (XCONS (tem)->car, 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
11881 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
11882 {
19060
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
11883 if (NILP (second_best))
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11884 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
11885 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
11886 {
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
11887 if (XINT (XCONS (second_best)->cdr) > size
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
11888 || XINT (XCONS (second_best)->cdr) < 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
11889 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
11890 }
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
11891 else
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
11892 {
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
11893 if (XINT (XCONS (second_best)->cdr) > size
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
11894 && XINT (XCONS (second_best)->cdr) > 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
11895 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
11896 }
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11897 }
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11898 }
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11899 if (!NILP (newlist))
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11900 break;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11901 else if (!NILP (second_best))
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11902 {
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11903 newlist = Fcons (XCONS (second_best)->car, Qnil);
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11904 break;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
11905 }
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11906 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11907
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11908 return newlist;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11909 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
11910
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11911
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11912 #if GLYPH_DEBUG
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11913
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11914 /* 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
11915 font table. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11916
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11917 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11918 x_check_font (f, font)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11919 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11920 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11921 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11922 int i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11923 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
11924
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11925 xassert (font != NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11926
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11927 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
11928 if (dpyinfo->font_table[i].name
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11929 && font == dpyinfo->font_table[i].font)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11930 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11931
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11932 xassert (i < dpyinfo->n_fonts);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11933 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11934
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11935 #endif /* GLYPH_DEBUG != 0 */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11936
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11937 /* 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
11938 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
11939 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
11940 "-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
11941 have font->min_bounds.width == 0. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11942
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11943 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11944 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
11945 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11946 int *w, *h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11947 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11948 *h = FONT_HEIGHT (font);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11949 *w = font->min_bounds.width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11950
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11951 /* 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
11952 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
11953 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
11954 if (*w <= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11955 *w = font->max_bounds.width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11956 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11957
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11958
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11959 /* 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
11960 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
11961 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
11962 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
11963 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
11964
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11965 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11966 x_compute_min_glyph_bounds (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11967 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11968 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11969 int i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11970 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
11971 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11972 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
11973 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
11974
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11975 dpyinfo->smallest_font_height = 100000;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11976 dpyinfo->smallest_char_width = 100000;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11977
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11978 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
11979 if (dpyinfo->font_table[i].name)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11980 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11981 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
11982 int w, h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11983
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11984 font = (XFontStruct *) fontp->font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11985 xassert (font != (XFontStruct *) ~0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11986 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
11987
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11988 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
11989 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
11990 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11992 xassert (dpyinfo->smallest_char_width > 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11993 && dpyinfo->smallest_font_height > 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11994
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11995 return (dpyinfo->n_fonts == 1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11996 || dpyinfo->smallest_char_width < old_width
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11997 || dpyinfo->smallest_font_height < old_height);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11998 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
11999
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12000
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12001 /* 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
12002 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
12003 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
12004 If loading is failed, return NULL. */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12005
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12006 struct font_info *
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12007 x_load_font (f, fontname, size)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12008 struct frame *f;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12009 register char *fontname;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12010 int size;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12011 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12012 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
12013 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
12014 int count;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12015
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12016 /* 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
12017 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
12018 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
12019 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
12020
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12021 if (!NILP (font_names))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12022 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12023 Lisp_Object tail;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12024 int i;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12025
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12026 for (i = 0; i < dpyinfo->n_fonts; i++)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12027 for (tail = font_names; CONSP (tail); tail = XCONS (tail)->cdr)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12028 if (dpyinfo->font_table[i].name
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12029 && (!strcmp (dpyinfo->font_table[i].name,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12030 XSTRING (XCONS (tail)->car)->data)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12031 || !strcmp (dpyinfo->font_table[i].full_name,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12032 XSTRING (XCONS (tail)->car)->data)))
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12033 return (dpyinfo->font_table + i);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12034 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12035
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12036 /* 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
12037 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12038 char *full_name;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12039 XFontStruct *font;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12040 struct font_info *fontp;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12041 unsigned long value;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12042 int i;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12043
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12044 /* 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
12045 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
12046 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
12047 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
12048 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
12049 if (size > 0 && !NILP (font_names))
17825
281d99590839 (dumpglyphs): Draw glyphs one by one if the font for
Kenichi Handa <handa@m17n.org>
parents: 17720
diff changeset
12050 fontname = (char *) XSTRING (XCONS (font_names)->car)->data;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12051
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12052 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
12053 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
12054 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
12055 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
12056 {
d4ee4399e999 (x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24224
diff changeset
12057 /* 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
12058 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
12059 font = NULL;
d4ee4399e999 (x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24224
diff changeset
12060 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
12061 }
d4ee4399e999 (x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24224
diff changeset
12062 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
12063 UNBLOCK_INPUT;
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
12064 if (!font)
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12065 return NULL;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12066
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12067 /* 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
12068 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
12069 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
12070 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12071
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12072 /* 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
12073 if (i == dpyinfo->n_fonts
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12074 && 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
12075 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12076 int sz;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12077 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
12078 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
12079 dpyinfo->font_table
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12080 = (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
12081 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12082
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12083 fontp = dpyinfo->font_table + i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12084 if (i == dpyinfo->n_fonts)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12085 ++dpyinfo->n_fonts;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12086
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12087 /* 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
12088 BLOCK_INPUT;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12089 fontp->font = font;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12090 fontp->font_idx = i;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12091 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
12092 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
12093
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12094 /* 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
12095 full_name = 0;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12096 if (XGetFontProperty (font, XA_FONT, &value))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12097 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12098 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
12099 char *p = name;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12100 int dashes = 0;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12101
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12102 /* 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
12103 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
12104 so don't use it.
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12105 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
12106 stored in them. */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12107 while (*p)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12108 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12109 if (*p == '-')
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12110 dashes++;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12111 p++;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12112 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12113
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12114 if (dashes >= 13)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12115 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12116 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
12117 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
12118 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12119
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12120 XFree (name);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12121 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12122
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12123 if (full_name != 0)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12124 fontp->full_name = full_name;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12125 else
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12126 fontp->full_name = fontp->name;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12127
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12128 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
12129 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
12130 {
4001ff593a99 (x_load_font): For the height of font, if normarl ascent and
Kenichi Handa <handa@m17n.org>
parents: 24223
diff changeset
12131 /* 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
12132 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
12133 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
12134 if (max_height > fontp->height)
24690
585a5e69e371 (x_load_font): Fix typo (`>' -> `=').
Kenichi Handa <handa@m17n.org>
parents: 24633
diff changeset
12135 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
12136 }
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12137
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12138 if (NILP (font_names))
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12139 {
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12140 /* 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
12141 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
12142 the cache for x_list_fonts. */
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12143 Lisp_Object lispy_name = build_string (fontname);
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12144 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
12145
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12146 XCONS (dpyinfo->name_list_element)->cdr
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12147 = Fcons (Fcons (Fcons (lispy_name, make_number (256)),
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12148 Fcons (Fcons (lispy_full_name,
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12149 make_number (fontp->size)),
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12150 Qnil)),
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12151 XCONS (dpyinfo->name_list_element)->cdr);
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12152 if (full_name)
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12153 XCONS (dpyinfo->name_list_element)->cdr
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12154 = Fcons (Fcons (Fcons (lispy_full_name, make_number (256)),
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12155 Fcons (Fcons (lispy_full_name,
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12156 make_number (fontp->size)),
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12157 Qnil)),
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12158 XCONS (dpyinfo->name_list_element)->cdr);
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12159 }
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
12160
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12161 /* 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
12162 code-points (0x20..0x7F or 0x2020..0x7F7F) of each charset to
17877
7841036d55f4 (x_load_font): Set 4 instead of -1 in fontp->encoding[1]
Kenichi Handa <handa@m17n.org>
parents: 17825
diff changeset
12163 the font code-points (0:0x20..0x7F, 1:0xA0..0xFF, 0:0x2020..0x7F7F,
18057
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
12164 the font code-points (0:0x20..0x7F, 1:0xA0..0xFF,
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
12165 0:0x2020..0x7F7F, 1:0xA0A0..0xFFFF, 3:0x20A0..0x7FFF, or
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
12166 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
12167 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
12168 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
12169 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
12170 fontp->encoding[1]
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12171 = (font->max_byte1 == 0
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12172 /* 1-byte font */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12173 ? (font->min_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12174 ? (font->max_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12175 ? 0 /* 0x20..0x7F */
18057
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
12176 : 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
12177 : 1) /* 0xA0..0xFF */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12178 /* 2-byte font */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12179 : (font->min_byte1 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12180 ? (font->max_byte1 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12181 ? (font->min_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12182 ? (font->max_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12183 ? 0 /* 0x2020..0x7F7F */
18057
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
12184 : 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
12185 : 3) /* 0x20A0..0x7FFF */
18057
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
12186 : 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
12187 : (font->min_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12188 ? (font->max_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12189 ? 2 /* 0xA020..0xFF7F */
18057
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
12190 : 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
12191 : 1))); /* 0xA0A0..0xFFFF */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12192
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12193 fontp->baseline_offset
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12194 = (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
12195 ? (long) value : 0);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12196 fontp->relative_compose
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12197 = (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
12198 ? (long) value : 0);
17103
7cde34a6424e (dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents: 17050
diff changeset
12199 fontp->default_ascent
7cde34a6424e (dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents: 17050
diff changeset
12200 = (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
12201 ? (long) value : 0);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12202
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12203 /* 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
12204 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
12205 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
12206 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
12207 glyph matrix reallocation necessary. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12208 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
12209 UNBLOCK_INPUT;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12210 return fontp;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12211 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12212 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12213
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12214
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12215 /* 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
12216 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
12217
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12218 struct font_info *
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12219 x_query_font (f, fontname)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12220 struct frame *f;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12221 register char *fontname;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12222 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12223 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
12224 int i;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12225
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12226 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
12227 if (dpyinfo->font_table[i].name
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12228 && (!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
12229 || !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
12230 return (dpyinfo->font_table + i);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12231 return NULL;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12232 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12233
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12234
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12235 /* 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
12236 `encoder' of the structure. */
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
12237
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
12238 void
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
12239 x_find_ccl_program (fontp)
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
12240 struct font_info *fontp;
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
12241 {
25068
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
12242 Lisp_Object list, elt;
21548
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
12243
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
12244 for (list = Vfont_ccl_encoder_alist; CONSP (list); list = XCONS (list)->cdr)
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
12245 {
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
12246 elt = XCONS (list)->car;
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
12247 if (CONSP (elt)
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
12248 && STRINGP (XCONS (elt)->car)
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
12249 && (fast_c_string_match_ignore_case (XCONS (elt)->car, fontp->name)
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
12250 >= 0))
25068
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
12251 break;
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
12252 }
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
12253 if (! NILP (list))
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
12254 {
25085
23813e3a69b8 (x_find_ccl_program): Add casting.
Kenichi Handa <handa@m17n.org>
parents: 25083
diff changeset
12255 struct ccl_program *ccl
23813e3a69b8 (x_find_ccl_program): Add casting.
Kenichi Handa <handa@m17n.org>
parents: 25083
diff changeset
12256 = (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
12257
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
12258 if (setup_ccl_program (ccl, XCONS (elt)->cdr) < 0)
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
12259 xfree (ccl);
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
12260 else
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
12261 fontp->font_encoder = ccl;
21548
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
12262 }
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
12263 }
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
12264
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12265
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12266
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12267 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12268 Initialization
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12269 ***********************************************************************/
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
12270
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12271 #ifdef USE_X_TOOLKIT
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12272 static XrmOptionDescRec emacs_options[] = {
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12273 {"-geometry", ".geometry", XrmoptionSepArg, NULL},
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12274 {"-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
12275
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12276 {"-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
12277 XrmoptionSepArg, NULL},
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12278 {"-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
12279
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12280 {"-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
12281 {"-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
12282 {"-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
12283 {"-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
12284 {"-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
12285 {"-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
12286 {"-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
12287 };
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12288 #endif /* USE_X_TOOLKIT */
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12289
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12290 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
12291
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12292 #ifdef MULTI_KBOARD
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12293 /* 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
12294 the screen number from the server number. */
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12295 static int
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12296 same_x_server (name1, name2)
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12297 char *name1, *name2;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12298 {
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12299 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
12300 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
12301 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
12302 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
12303
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
12304 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
12305 && 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
12306 length_until_period++;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
12307
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
12308 /* 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
12309 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
12310 name1 += 4;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
12311 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
12312 name2 += 4;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
12313 /* 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
12314 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
12315 && name1[system_name_length] == ':')
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
12316 name1 += system_name_length;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
12317 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
12318 && name2[system_name_length] == ':')
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
12319 name2 += system_name_length;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
12320 /* 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
12321 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
12322 && name1[length_until_period] == ':')
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
12323 name1 += length_until_period;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
12324 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
12325 && name2[length_until_period] == ':')
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
12326 name2 += length_until_period;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
12327
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12328 for (; *name1 != '\0' && *name1 == *name2; name1++, name2++)
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12329 {
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12330 if (*name1 == ':')
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12331 seen_colon++;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12332 if (seen_colon && *name1 == '.')
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12333 return 1;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12334 }
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12335 return (seen_colon
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12336 && (*name1 == '.' || *name1 == '\0')
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12337 && (*name2 == '.' || *name2 == '\0'));
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12338 }
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12339 #endif
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12340
23115
b992f7bb67d7 (fixup_locale): New function. For now, it resets
Paul Eggert <eggert@twinsun.com>
parents: 23107
diff changeset
12341 #if defined (HAVE_X_I18N) || (defined (USE_X_TOOLKIT) && defined (HAVE_X11XTR6))
b992f7bb67d7 (fixup_locale): New function. For now, it resets
Paul Eggert <eggert@twinsun.com>
parents: 23107
diff changeset
12342 /* Recover from setlocale (LC_ALL, ""). */
b992f7bb67d7 (fixup_locale): New function. For now, it resets
Paul Eggert <eggert@twinsun.com>
parents: 23107
diff changeset
12343 static void
b992f7bb67d7 (fixup_locale): New function. For now, it resets
Paul Eggert <eggert@twinsun.com>
parents: 23107
diff changeset
12344 fixup_locale ()
b992f7bb67d7 (fixup_locale): New function. For now, it resets
Paul Eggert <eggert@twinsun.com>
parents: 23107
diff changeset
12345 {
b992f7bb67d7 (fixup_locale): New function. For now, it resets
Paul Eggert <eggert@twinsun.com>
parents: 23107
diff changeset
12346 /* Currently we require strerror to use the "C" locale,
b992f7bb67d7 (fixup_locale): New function. For now, it resets
Paul Eggert <eggert@twinsun.com>
parents: 23107
diff changeset
12347 since we don't yet support decoding its string result. */
b992f7bb67d7 (fixup_locale): New function. For now, it resets
Paul Eggert <eggert@twinsun.com>
parents: 23107
diff changeset
12348 #ifdef LC_MESSAGES
b992f7bb67d7 (fixup_locale): New function. For now, it resets
Paul Eggert <eggert@twinsun.com>
parents: 23107
diff changeset
12349 setlocale (LC_MESSAGES, "C");
b992f7bb67d7 (fixup_locale): New function. For now, it resets
Paul Eggert <eggert@twinsun.com>
parents: 23107
diff changeset
12350 #endif
b992f7bb67d7 (fixup_locale): New function. For now, it resets
Paul Eggert <eggert@twinsun.com>
parents: 23107
diff changeset
12351
b992f7bb67d7 (fixup_locale): New function. For now, it resets
Paul Eggert <eggert@twinsun.com>
parents: 23107
diff changeset
12352 /* The Emacs Lisp reader needs LC_NUMERIC to be "C",
b992f7bb67d7 (fixup_locale): New function. For now, it resets
Paul Eggert <eggert@twinsun.com>
parents: 23107
diff changeset
12353 so that numbers are read and printed properly for Emacs Lisp. */
b992f7bb67d7 (fixup_locale): New function. For now, it resets
Paul Eggert <eggert@twinsun.com>
parents: 23107
diff changeset
12354 setlocale (LC_NUMERIC, "C");
b992f7bb67d7 (fixup_locale): New function. For now, it resets
Paul Eggert <eggert@twinsun.com>
parents: 23107
diff changeset
12355
b992f7bb67d7 (fixup_locale): New function. For now, it resets
Paul Eggert <eggert@twinsun.com>
parents: 23107
diff changeset
12356 /* Currently we require strftime to use the "C" locale,
b992f7bb67d7 (fixup_locale): New function. For now, it resets
Paul Eggert <eggert@twinsun.com>
parents: 23107
diff changeset
12357 since we don't yet support encoding its format argument,
b992f7bb67d7 (fixup_locale): New function. For now, it resets
Paul Eggert <eggert@twinsun.com>
parents: 23107
diff changeset
12358 or decoding its string result. */
b992f7bb67d7 (fixup_locale): New function. For now, it resets
Paul Eggert <eggert@twinsun.com>
parents: 23107
diff changeset
12359 setlocale (LC_TIME, "C");
b992f7bb67d7 (fixup_locale): New function. For now, it resets
Paul Eggert <eggert@twinsun.com>
parents: 23107
diff changeset
12360 }
b992f7bb67d7 (fixup_locale): New function. For now, it resets
Paul Eggert <eggert@twinsun.com>
parents: 23107
diff changeset
12361 #endif
b992f7bb67d7 (fixup_locale): New function. For now, it resets
Paul Eggert <eggert@twinsun.com>
parents: 23107
diff changeset
12362
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12363 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
12364 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
12365 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
12366 char *xrm_option;
10e818a0248a (x_term_init): New args xrm_option and resource_string.
Richard M. Stallman <rms@gnu.org>
parents: 7738
diff changeset
12367 char *resource_name;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12368 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12369 int connection;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12370 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
12371 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
12372 XrmDatabase xrdb;
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12373
11997
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
12374 BLOCK_INPUT;
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
12375
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12376 if (!x_initialized)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12377 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12378 x_initialize ();
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12379 x_initialized = 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12380 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12381
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
12382 #ifdef HAVE_X_I18N
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
12383 setlocale (LC_ALL, "");
23115
b992f7bb67d7 (fixup_locale): New function. For now, it resets
Paul Eggert <eggert@twinsun.com>
parents: 23107
diff changeset
12384 fixup_locale ();
13232
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
12385 #endif
e31057e55df7 (x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13205
diff changeset
12386
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12387 #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
12388 /* 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
12389 errors with X11R5:
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
12390 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
12391 on protocol request 18skiloaf.
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
12392 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
12393 #ifdef HAVE_X11XTR6
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
12394 XtSetLanguageProc (NULL, NULL, NULL);
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
12395 #endif
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
12396
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12397 {
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12398 int argc = 0;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12399 char *argv[3];
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12400
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12401 argv[0] = "";
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12402 argc = 1;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12403 if (xrm_option)
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12404 {
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12405 argv[argc++] = "-xrm";
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12406 argv[argc++] = xrm_option;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12407 }
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12408 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
12409 resource_name, EMACS_CLASS,
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12410 emacs_options, XtNumber (emacs_options),
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12411 &argc, argv);
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
12412
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
12413 #ifdef HAVE_X11XTR6
14963
6ac4f300f9b4 Include locale.h if HAVE_SETLOCALE.
Richard M. Stallman <rms@gnu.org>
parents: 14946
diff changeset
12414 /* 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
12415 fixup_locale ();
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
12416 #endif
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12417 }
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12418
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
12419 #else /* not USE_X_TOOLKIT */
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
12420 #ifdef HAVE_X11R5
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
12421 XSetLocaleModifiers ("");
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
12422 #endif
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12423 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
12424 #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
12425
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12426 /* Detect failure. */
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12427 if (dpy == 0)
11997
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
12428 {
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
12429 UNBLOCK_INPUT;
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
12430 return 0;
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
12431 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12432
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12433 /* 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
12434
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12435 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
12436
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12437 #ifdef MULTI_KBOARD
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12438 {
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12439 struct x_display_info *share;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12440 Lisp_Object tail;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12441
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12442 for (share = x_display_list, tail = x_display_name_list; share;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12443 share = share->next, tail = XCONS (tail)->cdr)
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12444 if (same_x_server (XSTRING (XCONS (XCONS (tail)->car)->car)->data,
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12445 XSTRING (display_name)->data))
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12446 break;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12447 if (share)
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12448 dpyinfo->kboard = share->kboard;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12449 else
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12450 {
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12451 dpyinfo->kboard = (KBOARD *) xmalloc (sizeof (KBOARD));
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12452 init_kboard (dpyinfo->kboard);
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
12453 if (!EQ (XSYMBOL (Qvendor_specific_keysyms)->function, Qunbound))
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
12454 {
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
12455 char *vendor = ServerVendor (dpy);
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
12456 dpyinfo->kboard->Vsystem_key_alist
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
12457 = call1 (Qvendor_specific_keysyms,
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
12458 build_string (vendor ? vendor : ""));
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
12459 }
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
12460
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12461 dpyinfo->kboard->next_kboard = all_kboards;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12462 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
12463 /* 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
12464 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
12465 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
12466 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
12467 current_kboard = dpyinfo->kboard;
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12468 }
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12469 dpyinfo->kboard->reference_count++;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12470 }
10652
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
12471 #endif
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
12472
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12473 /* 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
12474 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
12475 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
12476
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12477 /* 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
12478 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
12479 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
12480 dpyinfo->name_list_element = XCONS (x_display_name_list)->car;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12481
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12482 dpyinfo->display = dpy;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12483
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12484 #if 0
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12485 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
12486 #endif /* ! 0 */
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12487
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12488 dpyinfo->x_id_name
21244
50929073a0ba Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 21017
diff changeset
12489 = (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
12490 + 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
12491 + 2);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12492 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
12493 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
12494
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
12495 /* 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
12496 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
12497
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
12498 /* 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
12499 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
12500 = 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
12501
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12502 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
12503 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
12504 #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
12505 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
12506 #else
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12507 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
12508 #endif
11162
95b70c82ec51 (x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents: 11122
diff changeset
12509 /* 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
12510 all versions. */
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12511 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
12512
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12513 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
12514 DefaultScreen (dpyinfo->display));
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12515 dpyinfo->visual = select_visual (dpyinfo->display, dpyinfo->screen,
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12516 &dpyinfo->n_planes);
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12517 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
12518 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
12519 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
12520 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
12521 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
12522 dpyinfo->icon_bitmap_id = -1;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12523 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
12524 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
12525 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
12526 dpyinfo->bitmaps = 0;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12527 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
12528 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
12529 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
12530 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
12531 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
12532 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
12533 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
12534 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
12535 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
12536 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
12537 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
12538 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
12539 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
12540 dpyinfo->x_highlight_frame = 0;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12541 dpyinfo->image_cache = make_image_cache ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12542
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12543 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12544 int screen_number = XScreenNumberOfScreen (dpyinfo->screen);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12545 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
12546 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
12547 dpyinfo->resy = pixels * 25.4 / mm;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12548 pixels = DisplayWidth (dpyinfo->display, screen_number);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12549 mm = DisplayWidthMM (dpyinfo->display, screen_number);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12550 dpyinfo->resx = pixels * 25.4 / mm;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12551 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12552
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12553 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
12554 = 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
12555 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
12556 = 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
12557 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
12558 = 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
12559 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
12560 = 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
12561 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
12562 = 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
12563 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
12564 = 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
12565 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
12566 = 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
12567 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
12568 = 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
12569 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
12570 = 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
12571 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
12572 = 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
12573 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
12574 = XInternAtom (dpyinfo->display, "TEXT", False);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12575 dpyinfo->Xatom_COMPOUND_TEXT
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12576 = 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
12577 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
12578 = 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
12579 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
12580 = 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
12581 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
12582 = 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
12583 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
12584 = 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
12585 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
12586 = 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
12587 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
12588 = 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
12589 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
12590 = 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
12591 /* For properties of font. */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12592 dpyinfo->Xatom_PIXEL_SIZE
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12593 = XInternAtom (dpyinfo->display, "PIXEL_SIZE", False);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12594 dpyinfo->Xatom_MULE_BASELINE_OFFSET
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12595 = 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
12596 dpyinfo->Xatom_MULE_RELATIVE_COMPOSE
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12597 = 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
12598 dpyinfo->Xatom_MULE_DEFAULT_ASCENT
7cde34a6424e (dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents: 17050
diff changeset
12599 = 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
12600
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12601 /* Ghostscript support. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12602 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
12603 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
12604
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12605 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
12606 False);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12607
11162
95b70c82ec51 (x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents: 11122
diff changeset
12608 dpyinfo->cut_buffers_initialized = 0;
95b70c82ec51 (x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents: 11122
diff changeset
12609
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
12610 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
12611 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
12612
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12613 {
18705
c4f2eab8e736 (x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents: 18646
diff changeset
12614 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
12615
c4f2eab8e736 (x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents: 18646
diff changeset
12616 null_bits[0] = 0x00;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12617
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12618 dpyinfo->null_pixel
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12619 = XCreatePixmapFromBitmapData (dpyinfo->display, dpyinfo->root_window,
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12620 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
12621 1);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12622 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
12623
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12624 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12625 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
12626 extern unsigned char *gray_bitmap_bits;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12627 dpyinfo->gray
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12628 = XCreatePixmapFromBitmapData (dpyinfo->display, dpyinfo->root_window,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12629 gray_bitmap_bits,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12630 gray_bitmap_width, gray_bitmap_height,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12631 (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
12632 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12633
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9565
diff changeset
12634 #ifdef subprocesses
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9565
diff changeset
12635 /* 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
12636 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
12637 add_keyboard_wait_descriptor (connection);
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9565
diff changeset
12638 #endif
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
12639
4147
c6657758fb6f * xterm.c (x_term_init): Adjust message printed when we can't
Jim Blandy <jimb@redhat.com>
parents: 3951
diff changeset
12640 #ifndef F_SETOWN_BUG
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12641 #ifdef F_SETOWN
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12642 #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
12643 /* 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
12644 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
12645 #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
12646 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
12647 #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
12648 #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
12649 #endif /* F_SETOWN_BUG */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12650
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12651 #ifdef SIGIO
11994
b4dd8ca308dd (x_term_init): Call init_sigio only if interrupt_input.
Karl Heuer <kwzh@gnu.org>
parents: 11988
diff changeset
12652 if (interrupt_input)
b4dd8ca308dd (x_term_init): Call init_sigio only if interrupt_input.
Karl Heuer <kwzh@gnu.org>
parents: 11988
diff changeset
12653 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
12654 #endif /* ! defined (SIGIO) */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12655
15904
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
12656 #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
12657 #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
12658 /* 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
12659 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
12660 {
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
12661 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
12662 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
12663 Font font;
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
12664 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
12665
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
12666 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
12667 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
12668 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
12669 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
12670 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
12671 to.addr = (XPointer)&font;
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
12672 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
12673 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
12674 abort ();
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
12675 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
12676 XrmPutLineResource (&xrdb, "Emacs.dialog.*.font: 9x15");
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
12677 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
12678 }
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
12679 #endif
19021
6f150e46a5fd (x_term_init) [! HAVE_X11R5]: Don't try to use XtCvtStringToFont.
Richard M. Stallman <rms@gnu.org>
parents: 18996
diff changeset
12680 #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
12681
11997
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
12682 UNBLOCK_INPUT;
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
12683
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12684 return dpyinfo;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12685 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12686
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12687 /* 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
12688 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
12689
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12690 void
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12691 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
12692 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
12693 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12694 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
12695
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12696 /* 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
12697 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
12698 if (! NILP (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
12699 && EQ (XCONS (x_display_name_list)->car, dpyinfo->name_list_element))
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12700 x_display_name_list = XCONS (x_display_name_list)->cdr;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12701 else
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12702 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12703 Lisp_Object tail;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12705 tail = 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
12706 while (CONSP (tail) && CONSP (XCONS (tail)->cdr))
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12707 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12708 if (EQ (XCONS (XCONS (tail)->cdr)->car,
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12709 dpyinfo->name_list_element))
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12710 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12711 XCONS (tail)->cdr = XCONS (XCONS (tail)->cdr)->cdr;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12712 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12713 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12714 tail = XCONS (tail)->cdr;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12715 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12716 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12717
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12718 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
12719 x_display_list = dpyinfo->next;
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12720 else
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12721 {
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12722 struct x_display_info *tail;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12723
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12724 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
12725 if (tail->next == dpyinfo)
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12726 tail->next = tail->next->next;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12727 }
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12728
12771
6f07c79d9a05 (x_delete_display) [AIX]: Don't call XRmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 12750
diff changeset
12729 #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
12730 #ifndef AIX /* On AIX, XCloseDisplay calls this. */
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12731 XrmDestroyDatabase (dpyinfo->xrdb);
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12732 #endif
12771
6f07c79d9a05 (x_delete_display) [AIX]: Don't call XRmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 12750
diff changeset
12733 #endif
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12734 #ifdef MULTI_KBOARD
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
12735 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
12736 delete_kboard (dpyinfo->kboard);
10652
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
12737 #endif
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
12738 xfree (dpyinfo->font_table);
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
12739 xfree (dpyinfo->x_id_name);
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
12740 xfree (dpyinfo);
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12741 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12742
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12743 /* 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
12744
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12745 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
12746 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12747 x_produce_glyphs,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12748 x_write_glyphs,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12749 x_insert_glyphs,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12750 x_clear_end_of_line,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12751 x_scroll_run,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12752 x_after_update_window_line,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12753 x_update_window_begin,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12754 x_update_window_end,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12755 XTcursor_to,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12756 x_flush,
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
12757 x_get_glyph_overhangs,
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
12758 x_fix_overlapping_area
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12759 };
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12760
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
12761 void
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12762 x_initialize ()
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12763 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12764 rif = &x_redisplay_interface;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12765
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12766 clear_frame_hook = x_clear_frame;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12767 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
12768 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
12769 delete_glyphs_hook = x_delete_glyphs;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12770 ring_bell_hook = XTring_bell;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12771 reset_terminal_modes_hook = XTreset_terminal_modes;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12772 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
12773 update_begin_hook = x_update_begin;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12774 update_end_hook = x_update_end;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12775 set_terminal_window_hook = XTset_terminal_window;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12776 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
12777 frame_up_to_date_hook = XTframe_up_to_date;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12778 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
12779 mouse_position_hook = XTmouse_position;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12780 frame_rehighlight_hook = XTframe_rehighlight;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
12781 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
12782 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
12783 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
12784 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
12785 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
12786 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
12787
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
12788 scroll_region_ok = 1; /* we'll scroll partial frames */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12789 char_ins_del_ok = 0; /* just as fast to write the line */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12790 line_ins_del_ok = 1; /* we'll just blt 'em */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12791 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
12792 memory_below_frame = 0; /* we don't remember what scrolls
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12793 off the bottom */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12794 baud_rate = 19200;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12795
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12796 x_noop_count = 0;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12797 last_toolbar_item = -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12798 any_help_event_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12799
4476
e7de1b007447 (x_term_init): Set the hooks before we call Fset_input_mode.
Richard M. Stallman <rms@gnu.org>
parents: 4304
diff changeset
12800 /* 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
12801 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
12802
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12803 #ifdef USE_X_TOOLKIT
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12804 XtToolkitInitialize ();
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12805 Xt_app_con = XtCreateApplicationContext ();
12494
bfbe2490dbf0 (x_initialize) [USE_X_TOOLKIT]: Set fallback resources.
Richard M. Stallman <rms@gnu.org>
parents: 12431
diff changeset
12806 XtAppSetFallbackResources (Xt_app_con, Xt_default_resources);
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12807 #endif
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
12808
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
12809 /* 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
12810 original error handler. */
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
12811 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
12812 XSetIOErrorHandler (x_io_error_quitter);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12813
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12814 /* Disable Window Change signals; they are handled by X events. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12815 #ifdef SIGWINCH
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12816 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
12817 #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
12818
10743
6977bff3ff38 (x_display_bar_cursor): Use frame's cursor_width.
Richard M. Stallman <rms@gnu.org>
parents: 10652
diff changeset
12819 signal (SIGPIPE, x_connection_signal);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12820 }
395
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
12821
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12822
395
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
12823 void
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
12824 syms_of_xterm ()
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
12825 {
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
12826 staticpro (&x_error_message_string);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
12827 x_error_message_string = Qnil;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
12828
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
12829 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
12830 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
12831
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
12832 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
12833 last_mouse_scroll_bar = Qnil;
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
12834
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
12835 staticpro (&Qvendor_specific_keysyms);
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
12836 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
12837
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
12838 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
12839 last_mouse_press_frame = Qnil;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12840
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12841 staticpro (&help_echo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12842 help_echo = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12843 staticpro (&previous_help_echo);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12844 previous_help_echo = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12845
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12846 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
12847 "*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
12848 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
12849 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
12850 x_stretch_cursor_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12851
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12852 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
12853 "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
12854 #if USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12855 x_toolkit_scroll_bars_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12856 #else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12857 x_toolkit_scroll_bars_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12858 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12859
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12860 defsubr (&Sxt_process_timeouts);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12861 staticpro (&last_mouse_motion_frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12862 last_mouse_motion_frame = Qnil;
395
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
12863 }
14694
41de9b2640a1 (X_CONNECTION_LOCK_FLAG): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 14692
diff changeset
12864
41de9b2640a1 (X_CONNECTION_LOCK_FLAG): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 14692
diff changeset
12865 #endif /* not HAVE_X_WINDOWS */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
12866