annotate src/xterm.c @ 52679:32ebe48159a6

(graft_intervals_into_buffer): Handle over_used when splitting UNDER. Set BUF_INTERVALS (buffer)->up_obj when appropriate.
author Richard M. Stallman <rms@gnu.org>
date Tue, 30 Sep 2003 12:33:19 +0000
parents 4a9a4669a2b1
children 5c843bc4a3de
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.
51048
7ac9c3bea5ea (Fselect_window): Add optional arg `norecord'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50521
diff changeset
2 Copyright (C) 1989, 93, 94, 95, 96, 97, 98, 1999, 2000, 01, 02, 2003
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3 Free Software Foundation, Inc.
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5 This file is part of GNU Emacs.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 GNU Emacs is free software; you can redistribute it and/or modify
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8 it under the terms of the GNU General Public License as published by
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 555
diff changeset
9 the Free Software Foundation; either version 2, or (at your option)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10 any later version.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 GNU Emacs is distributed in the hope that it will be useful,
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15 GNU General Public License for more details.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 along with GNU Emacs; see the file COPYING. If not, write to
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 14165
diff changeset
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 14165
diff changeset
20 Boston, MA 02111-1307, USA. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
22 /* New display code by Gerd Moellmann <gerd@gnu.org>. */
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
23 /* Xt features made by Fred Pierresteguy. */
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
24
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25921
diff changeset
25 #include <config.h>
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25921
diff changeset
26
2977
ddcad1457cd5 Move signal.h and stdio.h before config.h.
Richard M. Stallman <rms@gnu.org>
parents: 2958
diff changeset
27 /* On 4.3 these lose if they come after xterm.h. */
ddcad1457cd5 Move signal.h and stdio.h before config.h.
Richard M. Stallman <rms@gnu.org>
parents: 2958
diff changeset
28 /* Putting these at the beginning seems to be standard for other .c files. */
ddcad1457cd5 Move signal.h and stdio.h before config.h.
Richard M. Stallman <rms@gnu.org>
parents: 2958
diff changeset
29 #include <signal.h>
ddcad1457cd5 Move signal.h and stdio.h before config.h.
Richard M. Stallman <rms@gnu.org>
parents: 2958
diff changeset
30
7902
22b9aaaf0302 Put stdio.h after config.h.
Richard M. Stallman <rms@gnu.org>
parents: 7870
diff changeset
31 #include <stdio.h>
22b9aaaf0302 Put stdio.h after config.h.
Richard M. Stallman <rms@gnu.org>
parents: 7870
diff changeset
32
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
33 #ifdef HAVE_X_WINDOWS
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
34
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
35 #include "lisp.h"
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2353
diff changeset
36 #include "blockinput.h"
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
37
21933
58f3be08e692 Include syssignal.h after lisp.h.
Andreas Schwab <schwab@suse.de>
parents: 21903
diff changeset
38 /* Need syssignal.h for various externs and definitions that may be required
58f3be08e692 Include syssignal.h after lisp.h.
Andreas Schwab <schwab@suse.de>
parents: 21903
diff changeset
39 by some configurations for calls to signal later in this source file. */
58f3be08e692 Include syssignal.h after lisp.h.
Andreas Schwab <schwab@suse.de>
parents: 21903
diff changeset
40 #include "syssignal.h"
58f3be08e692 Include syssignal.h after lisp.h.
Andreas Schwab <schwab@suse.de>
parents: 21903
diff changeset
41
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
42 /* This may include sys/types.h, and that somehow loses
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43 if this is not done before the other system files. */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
44 #include "xterm.h"
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
45 #include <X11/cursorfont.h>
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
47 /* Load sys/types.h if not already loaded.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
48 In some systems loading it twice is suicidal. */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
49 #ifndef makedev
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
50 #include <sys/types.h>
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
51 #endif /* makedev */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52
16220
02044b05d8e0 Replaced symbol BSD with BSD_SYSTEM.
Karl Heuer <kwzh@gnu.org>
parents: 16209
diff changeset
53 #ifdef BSD_SYSTEM
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
54 #include <sys/ioctl.h>
16220
02044b05d8e0 Replaced symbol BSD with BSD_SYSTEM.
Karl Heuer <kwzh@gnu.org>
parents: 16209
diff changeset
55 #endif /* ! defined (BSD_SYSTEM) */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
56
3355
e0c2e8a2ef75 (XTread_socket, case KeyPress) [HPUX]: Test IsModifiedKey.
Richard M. Stallman <rms@gnu.org>
parents: 3284
diff changeset
57 #include "systty.h"
555
e09a318cf838 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 517
diff changeset
58 #include "systime.h"
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
59
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
60 #ifndef INCLUDED_FCNTL
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
61 #include <fcntl.h>
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
62 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
63 #include <ctype.h>
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
64 #include <errno.h>
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
65 #include <setjmp.h>
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
66 #include <sys/stat.h>
10366
5e8b43cd8e96 Don't include param.h.
Richard M. Stallman <rms@gnu.org>
parents: 10287
diff changeset
67 /* Caused redefinition of DBL_DIG on Netbsd; seems not to be needed. */
5e8b43cd8e96 Don't include param.h.
Richard M. Stallman <rms@gnu.org>
parents: 10287
diff changeset
68 /* #include <sys/param.h> */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
69
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
70 #include "charset.h"
30748
13c7c5e6cc36 Include coding.h.
Kenichi Handa <handa@m17n.org>
parents: 30742
diff changeset
71 #include "coding.h"
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
72 #include "ccl.h"
23515
1e52542fb338 Include frame.h before fontset.h.
Kenichi Handa <handa@m17n.org>
parents: 23162
diff changeset
73 #include "frame.h"
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
74 #include "dispextern.h"
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
75 #include "fontset.h"
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
76 #include "termhooks.h"
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
77 #include "termopts.h"
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
78 #include "termchar.h"
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
79 #include "gnu.h"
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
80 #include "disptab.h"
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
81 #include "buffer.h"
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
82 #include "window.h"
8652
c2c1a477ddd5 Include keyboard.h.
Richard M. Stallman <rms@gnu.org>
parents: 8634
diff changeset
83 #include "keyboard.h"
8848
48b3ac951c53 Add #include "intervals.h"
Karl Heuer <kwzh@gnu.org>
parents: 8781
diff changeset
84 #include "intervals.h"
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
85 #include "process.h"
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
86 #include "atimer.h"
39697
0b986bb45526 Include keymap.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
87 #include "keymap.h"
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
88
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
89 #ifdef USE_X_TOOLKIT
15117
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
90 #include <X11/Shell.h>
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
91 #endif
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
92
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
93 #ifdef HAVE_SYS_TIME_H
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
94 #include <sys/time.h>
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
95 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
96 #ifdef HAVE_UNISTD_H
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
97 #include <unistd.h>
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
98 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
99
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
100 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
101 #include "gtkutil.h"
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
102 #endif
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
103
39922
538760a4422e (xlwmenu_window_p, xlwmenu_redisplay): Add prototypes.
Pavel Janík <Pavel@Janik.cz>
parents: 39914
diff changeset
104 #ifdef USE_LUCID
46113
18d1aad1c8ab Fix prototype for K&R.
Dave Love <fx@gnu.org>
parents: 46079
diff changeset
105 extern int xlwmenu_window_p P_ ((Widget w, Window window));
39922
538760a4422e (xlwmenu_window_p, xlwmenu_redisplay): Add prototypes.
Pavel Janík <Pavel@Janik.cz>
parents: 39914
diff changeset
106 extern void xlwmenu_redisplay P_ ((Widget));
538760a4422e (xlwmenu_window_p, xlwmenu_redisplay): Add prototypes.
Pavel Janík <Pavel@Janik.cz>
parents: 39914
diff changeset
107 #endif
538760a4422e (xlwmenu_window_p, xlwmenu_redisplay): Add prototypes.
Pavel Janík <Pavel@Janik.cz>
parents: 39914
diff changeset
108
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
109 #if defined (USE_X_TOOLKIT) || defined (USE_GTK)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
110
30321
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
111 extern void free_frame_menubar P_ ((struct frame *));
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
112 extern struct frame *x_menubar_window_to_frame P_ ((struct x_display_info *,
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
113 int));
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
114 #endif
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
115
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
116 #ifdef USE_X_TOOLKIT
13507
9a9f459075af (HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
117 #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
118 #define HACK_EDITRES
6941
a914781ef58a (Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents: 6934
diff changeset
119 extern void _XEditResCheckMessages ();
13507
9a9f459075af (HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
120 #endif /* not NO_EDITRES */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
121
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
122 /* 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
123
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
124 #ifdef USE_TOOLKIT_SCROLL_BARS
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
125 #if defined USE_MOTIF
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
126 #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
127 #include <Xm/ScrollBar.h>
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
128 #else /* !USE_MOTIF i.e. use Xaw */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
129
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
130 #ifdef HAVE_XAW3D
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
131 #include <X11/Xaw3d/Simple.h>
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
132 #include <X11/Xaw3d/Scrollbar.h>
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
133 #define ARROW_SCROLLBAR
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
134 #include <X11/Xaw3d/ScrollbarP.h>
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
135 #else /* !HAVE_XAW3D */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
136 #include <X11/Xaw/Simple.h>
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
137 #include <X11/Xaw/Scrollbar.h>
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
138 #endif /* !HAVE_XAW3D */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
139 #ifndef XtNpickTop
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
140 #define XtNpickTop "pickTop"
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
141 #endif /* !XtNpickTop */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
142 #endif /* !USE_MOTIF */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
143 #endif /* USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
144
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
145 #endif /* USE_X_TOOLKIT */
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
146
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
147 #if ! defined (USE_X_TOOLKIT) && ! defined (USE_GTK)
6022
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
148 #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
149 #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
150 #endif
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
151
7602
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
152 #ifdef USE_X_TOOLKIT
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
153 #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
154 #ifndef XtNinitialState
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
155 #define XtNinitialState "initialState"
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
156 #endif
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
157 #endif
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
158
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
159 #define abs(x) ((x) < 0 ? -(x) : (x))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
160
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
161 /* Default to using XIM if available. */
51823
01bf5601e788 (use_xim) [!USE_XIM]: Default to disable XIM if emacs
Kim F. Storm <storm@cua.dk>
parents: 51676
diff changeset
162 #ifdef USE_XIM
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
163 int use_xim = 1;
51823
01bf5601e788 (use_xim) [!USE_XIM]: Default to disable XIM if emacs
Kim F. Storm <storm@cua.dk>
parents: 51676
diff changeset
164 #else
01bf5601e788 (use_xim) [!USE_XIM]: Default to disable XIM if emacs
Kim F. Storm <storm@cua.dk>
parents: 51676
diff changeset
165 int use_xim = 0; /* configure --without-xim */
01bf5601e788 (use_xim) [!USE_XIM]: Default to disable XIM if emacs
Kim F. Storm <storm@cua.dk>
parents: 51676
diff changeset
166 #endif
01bf5601e788 (use_xim) [!USE_XIM]: Default to disable XIM if emacs
Kim F. Storm <storm@cua.dk>
parents: 51676
diff changeset
167
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
168
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
169
34869
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
170 /* Non-nil means Emacs uses toolkit scroll bars. */
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
171
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
172 Lisp_Object Vx_toolkit_scroll_bars;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
173
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
174 /* 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
175 start. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
176
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
177 static int any_help_event_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
178
44359
ff9f7aee02c8 Rename autoselect_window_p to mouse_autoselect_window.
Pavel Janík <Pavel@Janik.cz>
parents: 44313
diff changeset
179 /* Last window where we saw the mouse. Used by mouse-autoselect-window. */
44301
1892db006468 (autoselect_window_p): Renamed from `x_autoselect_window_p'.
Pavel Janík <Pavel@Janik.cz>
parents: 44275
diff changeset
180 static Lisp_Object last_window;
43343
ac7b0c0802cc (x-autoselect-window): New variable.
Pavel Janík <Pavel@Janik.cz>
parents: 43302
diff changeset
181
37153
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
182 /* Non-zero means make use of UNDERLINE_POSITION font properties. */
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
183
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
184 int x_use_underline_position_properties;
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
185
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
186 /* 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
187 use. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
188
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
189 struct x_display_info *x_display_list;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
190
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
191 /* 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
192 . 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
193 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
194 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
195
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
196 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
197
2474
86c8a6e08fd4 Fix typo in comment delimiter.
Richard M. Stallman <rms@gnu.org>
parents: 2468
diff changeset
198 /* 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
199 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
200 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
201 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
202
2468
35aa32e1a003 * xterm.c (updating_frame): Declare this extern instead of static,
Jim Blandy <jimb@redhat.com>
parents: 2439
diff changeset
203 extern struct frame *updating_frame;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
204
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
205 /* 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
206
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
207 struct frame *pending_autoraise_frame;
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
208
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
209 #ifdef USE_X_TOOLKIT
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
210 /* The application context for Xt use. */
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
211 XtAppContext Xt_app_con;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
212 static String Xt_default_resources[] = {0};
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
213 #endif /* USE_X_TOOLKIT */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
214
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
215 /* Non-zero means user is interacting with a toolkit scroll bar. */
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
216
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
217 static int toolkit_scroll_bar_interaction;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
218
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
219 /* Mouse movement.
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
220
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
221 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
222 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
223 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
224 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
225
c99dd01d9334 (note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 14963
diff changeset
226 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
227
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
228 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
229 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
230 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
231 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
232 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
233 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
234 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
235 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
236 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
237 is off. */
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
238
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
239 /* 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
240
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
241 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
242 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
243
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
244 /* 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
245
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
246 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
247 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
248 an ordinary motion.
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
249
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
250 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
251 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
252 event. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
253
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
254 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
255
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
256 /* 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
257 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
258 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
259 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
260 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
261 it's somewhat accurate. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
262
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
263 static Time last_mouse_movement_time;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
264
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
265 /* 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
266 events. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
267
9337
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
268 #ifdef __STDC__
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
269 static int volatile input_signal_count;
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
270 #else
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
271 static int input_signal_count;
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
272 #endif
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
273
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
274 /* Used locally within XTread_socket. */
24991
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 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
277
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
278 /* 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
279
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
280 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
281 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
282
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
283 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
284
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
285 /* Tells if a window manager is present or not. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
287 extern Lisp_Object Vx_no_window_manager;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
288
48085
1c06bf924a62 (Qeql): Declare.
Dave Love <fx@gnu.org>
parents: 48025
diff changeset
289 extern Lisp_Object Qface, Qmouse_face, Qeql;
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
290
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
291 extern int errno;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
292
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
293 /* 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
294
43713
f92c4d87863a Change defvar_int def and vars to use EMACS_INT instead of just int.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43621
diff changeset
295 extern EMACS_INT extra_keyboard_modifiers;
1841
338e4ffdb54b (XTread_socket): Support extra_keyboard_modifiers.
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
296
43302
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
297 /* The keysyms to use for the various modifiers. */
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
298
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
299 Lisp_Object Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym, Vx_super_keysym;
48085
1c06bf924a62 (Qeql): Declare.
Dave Love <fx@gnu.org>
parents: 48025
diff changeset
300 Lisp_Object Vx_keysym_table;
43302
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
301 static Lisp_Object Qalt, Qhyper, Qmeta, Qsuper, Qmodifier_value;
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
302
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
303 static Lisp_Object Qvendor_specific_keysyms;
51405
c3e680aa1a51 (Qutf_8): Moved to coding.c
Dave Love <fx@gnu.org>
parents: 51213
diff changeset
304 static Lisp_Object Qlatin_1;
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
305
30321
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
306 extern XrmDatabase x_load_resources P_ ((Display *, char *, char *, char *));
52631
4a9a4669a2b1 (x_bitmap_mask): Declare.
Dave Love <fx@gnu.org>
parents: 52546
diff changeset
307 extern int x_bitmap_mask P_ ((FRAME_PTR, int));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
308
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
309 static int x_alloc_nearest_color_1 P_ ((Display *, Colormap, XColor *));
35487
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
310 static void x_set_window_size_1 P_ ((struct frame *, int, int, int));
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
311 static const XColor *x_color_cells P_ ((Display *, int *));
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
312 static void x_update_window_end P_ ((struct window *, int, int));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
313 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
314 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
315 unsigned));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
316 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
317 int x_catch_errors P_ ((Display *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
318 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
319 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
320 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
321 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
322 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
323 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
324 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
325 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
326 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
327 void x_initialize P_ ((void));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
328 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
329 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
330 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
331 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
332 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
333 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
334 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
335 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
336 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
337 static void x_new_focus_frame P_ ((struct x_display_info *, struct frame *));
46076
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
338 static int x_focus_changed P_ ((int,
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
339 int,
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
340 struct x_display_info *,
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
341 struct frame *,
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
342 struct input_event *,
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
343 int));
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
344 static int x_detect_focus_change P_ ((struct x_display_info *,
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
345 XEvent *,
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
346 struct input_event *,
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
347 int));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
348 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
349 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
350 static void x_draw_hollow_cursor P_ ((struct window *, struct glyph_row *));
44690
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
351 static void x_draw_bar_cursor P_ ((struct window *, struct glyph_row *, int,
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
352 enum text_cursor_kinds));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
353
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
354 static void x_clip_to_row P_ ((struct window *, struct glyph_row *, GC));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
355 static void x_flush P_ ((struct frame *f));
30321
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
356 static void x_update_begin P_ ((struct frame *));
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
357 static void x_update_window_begin P_ ((struct window *));
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
358 static void x_after_update_window_line P_ ((struct glyph_row *));
36492
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
359 static struct scroll_bar *x_window_to_scroll_bar P_ ((Window));
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
360 static void x_scroll_bar_report_motion P_ ((struct frame **, Lisp_Object *,
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
361 enum scroll_bar_part *,
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
362 Lisp_Object *, Lisp_Object *,
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
363 unsigned long *));
42717
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
364 static void x_check_fullscreen P_ ((struct frame *));
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
365 static void x_check_fullscreen_move P_ ((struct frame *));
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
366 static int handle_one_xevent P_ ((struct x_display_info *,
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
367 XEvent *,
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
368 struct input_event **,
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
369 int *,
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
370 int *));
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
371
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
372
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
373 /* 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
374
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
375 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
376 x_flush (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
377 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
378 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
379 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
380 if (f == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
381 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
382 Lisp_Object rest, frame;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
383 FOR_EACH_FRAME (rest, frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
384 x_flush (XFRAME (frame));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
385 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
386 else if (FRAME_X_P (f))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
387 XFlush (FRAME_X_DISPLAY (f));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
388 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
389 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
390
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
391
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
392 /* 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
393 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
394 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
395 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
396 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
397 performance. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
398
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
399 #define XFlush(DISPLAY) (void) 0
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
400
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
401
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
402 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
403 Debugging
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
404 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
405
12192
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
406 #if 0
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
407
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
408 /* 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
409 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
410
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
411 struct record
12192
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
412 {
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
413 char *locus;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
414 int type;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
415 };
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
416
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
417 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
418
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
419 int event_record_index;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
420
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
421 record_event (locus, type)
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
422 char *locus;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
423 int type;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
424 {
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
425 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
426 event_record_index = 0;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
427
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
428 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
429 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
430 event_record_index++;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
431 }
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
432
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
433 #endif /* 0 */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
434
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
435
12192
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
436
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
437 /* 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
438
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
439 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
440 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
441 Display *dpy;
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
442 {
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
443 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
444
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
445 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
446 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
447 return dpyinfo;
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
448
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
449 return 0;
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
450 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
451
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
452
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
453
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
454 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
455 Starting and ending an update
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
456 ***********************************************************************/
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
457
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
458 /* 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
459 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
460 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
461 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
462 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
463
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
464 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
465 x_update_begin (f)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
466 struct frame *f;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
467 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
468 /* Nothing to do. */
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
471
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
472 /* 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
473 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
474 position of W. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
475
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
476 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
477 x_update_window_begin (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
478 struct window *w;
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 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
481 struct x_display_info *display_info = FRAME_X_DISPLAY_INFO (f);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
482
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
483 updated_window = w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
484 set_output_cursor (&w->cursor);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
485
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
486 BLOCK_INPUT;
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
487
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
488 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
489 {
6660
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
490 /* 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
491 display_info->mouse_face_defer = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
492
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
493 /* 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
494 highlighting. */
10274
83aaf59dabbe (XTupdate_begin): Fix backward test in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 10223
diff changeset
495 if (FRAME_GARBAGED_P (f))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
496 display_info->mouse_face_window = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
497
30153
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
498 #if 0 /* Rows in a current matrix containing glyphs in mouse-face have
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
499 their mouse_face_p flag set, which means that they are always
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
500 unequal to rows in a desired matrix which never have that
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
501 flag set. So, rows containing mouse-face glyphs are never
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
502 scrolled, and we don't have to switch the mouse highlight off
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
503 here to prevent it from being scrolled. */
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
504
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
505 /* 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
506 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
507 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
508 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
509 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
510 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
511 && 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
512 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
513 int i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
514
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
515 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
516 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
517 break;
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
518
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
519 if (i < w->desired_matrix->nrows)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
520 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
521 }
30153
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
522 #endif /* 0 */
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
523 }
8781
98741404d3e0 Delete X11 conditionals.
Richard M. Stallman <rms@gnu.org>
parents: 8724
diff changeset
524
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
525 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
526 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
527
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
528
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
529 /* Draw a vertical window border from (x,y0) to (x,y1) */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
530
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
531 static void
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
532 x_draw_vertical_window_border (w, x, y0, y1)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
533 struct window *w;
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
534 int x, y0, y1;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
535 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
536 struct frame *f = XFRAME (WINDOW_FRAME (w));
51897
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
537
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
538 XDrawLine (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
539 f->output_data.x->normal_gc, x, y0, x, y1);
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
540 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
541
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
542 /* End update of window W (which is equal to updated_window).
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
543
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
544 Draw vertical borders between horizontally adjacent windows, and
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
545 display W's cursor if CURSOR_ON_P is non-zero.
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
546
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
547 MOUSE_FACE_OVERWRITTEN_P non-zero means that some row containing
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
548 glyphs in mouse-face were overwritten. In that case we have to
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
549 make sure that the mouse-highlight is properly redrawn.
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
550
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
551 W may be a menu bar pseudo-window in case we don't have X toolkit
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
552 support. Such windows don't have a cursor, so don't display it
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
553 here. */
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
554
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
555 static void
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
556 x_update_window_end (w, cursor_on_p, mouse_face_overwritten_p)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
557 struct window *w;
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
558 int cursor_on_p, mouse_face_overwritten_p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
559 {
36929
9d0ed4b0c89a (x_update_window_end): Handle overwritten mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 36880
diff changeset
560 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (XFRAME (w->frame));
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
561
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
562 if (!w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
563 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
564 BLOCK_INPUT;
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
565
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
566 if (cursor_on_p)
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
567 display_and_set_cursor (w, 1, output_cursor.hpos,
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
568 output_cursor.vpos,
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
569 output_cursor.x, output_cursor.y);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
570
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
571 x_draw_vertical_border (w);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
572 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
573 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
574
36929
9d0ed4b0c89a (x_update_window_end): Handle overwritten mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 36880
diff changeset
575 /* If a row with mouse-face was overwritten, arrange for
9d0ed4b0c89a (x_update_window_end): Handle overwritten mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 36880
diff changeset
576 XTframe_up_to_date to redisplay the mouse highlight. */
9d0ed4b0c89a (x_update_window_end): Handle overwritten mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 36880
diff changeset
577 if (mouse_face_overwritten_p)
9d0ed4b0c89a (x_update_window_end): Handle overwritten mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 36880
diff changeset
578 {
9d0ed4b0c89a (x_update_window_end): Handle overwritten mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 36880
diff changeset
579 dpyinfo->mouse_face_beg_row = dpyinfo->mouse_face_beg_col = -1;
9d0ed4b0c89a (x_update_window_end): Handle overwritten mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 36880
diff changeset
580 dpyinfo->mouse_face_end_row = dpyinfo->mouse_face_end_col = -1;
9d0ed4b0c89a (x_update_window_end): Handle overwritten mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 36880
diff changeset
581 dpyinfo->mouse_face_window = Qnil;
9d0ed4b0c89a (x_update_window_end): Handle overwritten mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 36880
diff changeset
582 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
583
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
584 updated_window = NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
585 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
586
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 /* 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
589 update_end. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
590
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
591 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
592 x_update_end (f)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
593 struct frame *f;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
594 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
595 /* Mouse highlight may be displayed again. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
596 FRAME_X_DISPLAY_INFO (f)->mouse_face_defer = 0;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
597
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
598 #ifndef XFlush
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
599 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
600 XFlush (FRAME_X_DISPLAY (f));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
601 UNBLOCK_INPUT;
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
602 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
603 }
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
604
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
605
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
606 /* 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
607 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
608 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
609
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
610 static void
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
611 XTframe_up_to_date (f)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
612 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
613 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
614 if (FRAME_X_P (f))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
615 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
616 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
617
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
618 if (dpyinfo->mouse_face_deferred_gc
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
619 || f == dpyinfo->mouse_face_mouse_frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
620 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
621 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
622 if (dpyinfo->mouse_face_mouse_frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
623 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
624 dpyinfo->mouse_face_mouse_x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
625 dpyinfo->mouse_face_mouse_y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
626 dpyinfo->mouse_face_deferred_gc = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
627 UNBLOCK_INPUT;
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 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
630 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
631
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
632
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
633 /* Draw truncation mark bitmaps, continuation mark bitmaps, overlay
41134
04a7db64864b Fringe cleanup.
Kim F. Storm <storm@cua.dk>
parents: 41088
diff changeset
634 arrow bitmaps, or clear the fringes if no bitmaps are required
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
635 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
636 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
637 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
638 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
639
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
640 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
641 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
642 struct glyph_row *desired_row;
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 struct window *w = updated_window;
40435
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
645 struct frame *f;
40514
a4363606beb1 (x_after_update_window_line): Don't run the code
Gerd Moellmann <gerd@gnu.org>
parents: 40499
diff changeset
646 int width, height;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
647
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
648 xassert (w);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
649
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
650 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
651 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
652 BLOCK_INPUT;
50097
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
653 draw_row_fringe_bitmaps (w, desired_row);
40435
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
654 UNBLOCK_INPUT;
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
655 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
656
40435
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
657 /* When a window has disappeared, make sure that no rest of
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
658 full-width rows stays visible in the internal border. Could
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
659 check here if updated_window is the leftmost/rightmost window,
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
660 but I guess it's not worth doing since vertically split windows
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
661 are almost never used, internal border is rarely set, and the
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
662 overhead is very small. */
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
663 if (windows_or_buffers_changed
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
664 && desired_row->full_width_p
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
665 && (f = XFRAME (w->frame),
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
666 width = FRAME_INTERNAL_BORDER_WIDTH (f),
40514
a4363606beb1 (x_after_update_window_line): Don't run the code
Gerd Moellmann <gerd@gnu.org>
parents: 40499
diff changeset
667 width != 0)
a4363606beb1 (x_after_update_window_line): Don't run the code
Gerd Moellmann <gerd@gnu.org>
parents: 40499
diff changeset
668 && (height = desired_row->visible_height,
a4363606beb1 (x_after_update_window_line): Don't run the code
Gerd Moellmann <gerd@gnu.org>
parents: 40499
diff changeset
669 height > 0))
a4363606beb1 (x_after_update_window_line): Don't run the code
Gerd Moellmann <gerd@gnu.org>
parents: 40499
diff changeset
670 {
40435
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
671 int y = WINDOW_TO_FRAME_PIXEL_Y (w, max (0, desired_row->y));
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
672
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
673 /* Internal border is drawn below the tool bar. */
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
674 if (WINDOWP (f->tool_bar_window)
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
675 && w == XWINDOW (f->tool_bar_window))
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
676 y -= width;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
677
40435
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
678 BLOCK_INPUT;
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
679 x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
680 0, y, width, height, False);
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
681 x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
682 FRAME_PIXEL_WIDTH (f) - width,
40435
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
683 y, width, height, False);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
684 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
685 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
686 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
687
50097
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
688 static void
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
689 x_draw_fringe_bitmap (w, row, p)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
690 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
691 struct glyph_row *row;
50097
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
692 struct draw_fringe_bitmap_params *p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
693 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
694 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
695 Display *display = FRAME_X_DISPLAY (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
696 Window window = FRAME_X_WINDOW (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
697 GC gc = f->output_data.x->normal_gc;
50097
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
698 struct face *face = p->face;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
699
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
700 /* Must clip because of partially visible lines. */
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
701 x_clip_to_row (w, row, gc);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
702
50097
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
703 if (p->bx >= 0)
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
704 {
41721
e0335ea68760 (zv_height, zv_bits, zv_period): Changed zv bitmap to
Kim F. Storm <storm@cua.dk>
parents: 41631
diff changeset
705 /* In case the same realized face is used for fringes and
e0335ea68760 (zv_height, zv_bits, zv_period): Changed zv bitmap to
Kim F. Storm <storm@cua.dk>
parents: 41631
diff changeset
706 for something displayed in the text (e.g. face `region' on
e0335ea68760 (zv_height, zv_bits, zv_period): Changed zv bitmap to
Kim F. Storm <storm@cua.dk>
parents: 41631
diff changeset
707 mono-displays, the fill style may have been changed to
e0335ea68760 (zv_height, zv_bits, zv_period): Changed zv bitmap to
Kim F. Storm <storm@cua.dk>
parents: 41631
diff changeset
708 FillSolid in x_draw_glyph_string_background. */
e0335ea68760 (zv_height, zv_bits, zv_period): Changed zv bitmap to
Kim F. Storm <storm@cua.dk>
parents: 41631
diff changeset
709 if (face->stipple)
e0335ea68760 (zv_height, zv_bits, zv_period): Changed zv bitmap to
Kim F. Storm <storm@cua.dk>
parents: 41631
diff changeset
710 XSetFillStyle (display, face->gc, FillOpaqueStippled);
e0335ea68760 (zv_height, zv_bits, zv_period): Changed zv bitmap to
Kim F. Storm <storm@cua.dk>
parents: 41631
diff changeset
711 else
e0335ea68760 (zv_height, zv_bits, zv_period): Changed zv bitmap to
Kim F. Storm <storm@cua.dk>
parents: 41631
diff changeset
712 XSetForeground (display, face->gc, face->background);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
713
41721
e0335ea68760 (zv_height, zv_bits, zv_period): Changed zv bitmap to
Kim F. Storm <storm@cua.dk>
parents: 41631
diff changeset
714 XFillRectangle (display, window, face->gc,
50097
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
715 p->bx, p->by, p->nx, p->ny);
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
716
41721
e0335ea68760 (zv_height, zv_bits, zv_period): Changed zv bitmap to
Kim F. Storm <storm@cua.dk>
parents: 41631
diff changeset
717 if (!face->stipple)
e0335ea68760 (zv_height, zv_bits, zv_period): Changed zv bitmap to
Kim F. Storm <storm@cua.dk>
parents: 41631
diff changeset
718 XSetForeground (display, face->gc, face->foreground);
e0335ea68760 (zv_height, zv_bits, zv_period): Changed zv bitmap to
Kim F. Storm <storm@cua.dk>
parents: 41631
diff changeset
719 }
e0335ea68760 (zv_height, zv_bits, zv_period): Changed zv bitmap to
Kim F. Storm <storm@cua.dk>
parents: 41631
diff changeset
720
50097
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
721 if (p->which != NO_FRINGE_BITMAP)
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
722 {
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
723 unsigned char *bits = fringe_bitmaps[p->which].bits + p->dh;
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
724 Pixmap pixmap;
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
725 int depth = DefaultDepthOfScreen (FRAME_X_SCREEN (f));
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
726
41741
c0edacaaaea8 (x_draw_fringe_bitmap): Always undo clipping.
Gerd Moellmann <gerd@gnu.org>
parents: 41721
diff changeset
727 /* Draw the bitmap. I believe these small pixmaps can be cached
c0edacaaaea8 (x_draw_fringe_bitmap): Always undo clipping.
Gerd Moellmann <gerd@gnu.org>
parents: 41721
diff changeset
728 by the server. */
50097
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
729 pixmap = XCreatePixmapFromBitmapData (display, window, bits, p->wd, p->h,
41741
c0edacaaaea8 (x_draw_fringe_bitmap): Always undo clipping.
Gerd Moellmann <gerd@gnu.org>
parents: 41721
diff changeset
730 face->foreground,
c0edacaaaea8 (x_draw_fringe_bitmap): Always undo clipping.
Gerd Moellmann <gerd@gnu.org>
parents: 41721
diff changeset
731 face->background, depth);
50097
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
732 XCopyArea (display, pixmap, window, gc, 0, 0,
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
733 p->wd, p->h, p->x, p->y);
41741
c0edacaaaea8 (x_draw_fringe_bitmap): Always undo clipping.
Gerd Moellmann <gerd@gnu.org>
parents: 41721
diff changeset
734 XFreePixmap (display, pixmap);
c0edacaaaea8 (x_draw_fringe_bitmap): Always undo clipping.
Gerd Moellmann <gerd@gnu.org>
parents: 41721
diff changeset
735 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
736
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
737 XSetClipMask (display, gc, None);
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
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
740
24991
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 /* 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
743 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
744 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
745 rarely happens). */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
746
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
747 static void
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
748 XTset_terminal_modes ()
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
749 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
750 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
751
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
752 /* 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
753 the X-windows go away, and suspending requires no action. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
754
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
755 static void
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
756 XTreset_terminal_modes ()
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
757 {
24991
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
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
761
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
762 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
763 Display Iterator
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
764 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
765
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
766 /* Function prototypes of this page. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
767
50151
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
768 static int x_encode_char P_ ((int, XChar2b *, struct font_info *, int *));
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
769
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
770
27974
d443ad369a18 (PER_CHAR_METRIC): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27967
diff changeset
771 /* Get metrics of character CHAR2B in FONT. Value is null if CHAR2B
d443ad369a18 (PER_CHAR_METRIC): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27967
diff changeset
772 is not contained in the font. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
773
50151
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
774 static XCharStruct *
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
775 x_per_char_metric (font, char2b, font_type)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
776 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
777 XChar2b *char2b;
50151
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
778 int font_type; /* unused on X */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
779 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
780 /* The result metric information. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
781 XCharStruct *pcm = NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
782
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
783 xassert (font && char2b);
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 if (font->per_char != NULL)
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 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
788 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
789 /* 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
790 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
791 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
792 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
793 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
794 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
795 if (char2b->byte1 == 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
796 && 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
797 && 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
798 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
799 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
800 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
801 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
802 /* 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
803 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
804 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
805 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
806
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
807 byte1 = N/D + min_byte1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
808 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
809
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
810 where:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
811
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
812 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
813 / = integer division
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
814 \ = integer modulus */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
815 if (char2b->byte1 >= font->min_byte1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
816 && char2b->byte1 <= font->max_byte1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
817 && 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
818 && 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
819 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
820 pcm = (font->per_char
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
821 + ((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
822 * (char2b->byte1 - font->min_byte1))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
823 + (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
824 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
825 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
826 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
827 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
828 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
829 /* 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
830 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
831 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
832 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
833 && 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
834 pcm = &font->max_bounds;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
835 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
836
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
837 return ((pcm == NULL
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
838 || (pcm->width == 0 && (pcm->rbearing - pcm->lbearing) == 0))
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
839 ? NULL : pcm);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
840 }
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 /* 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
844 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
845
50151
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
846 static int
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
847 x_encode_char (c, char2b, font_info, two_byte_p)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
848 int c;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
849 XChar2b *char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
850 struct font_info *font_info;
50151
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
851 int *two_byte_p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
852 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
853 int charset = CHAR_CHARSET (c);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
854 XFontStruct *font = font_info->font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
855
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
856 /* 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
857 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
858 fixed encoding. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
859 if (font_info->font_encoder)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
860 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
861 /* It's a program. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
862 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
863
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
864 if (CHARSET_DIMENSION (charset) == 1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
865 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
866 ccl->reg[0] = charset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
867 ccl->reg[1] = char2b->byte2;
47699
a8e563d6dbb3 (x_encode_char): For DIM=1 charset, set ccl->reg[2] to
Kenichi Handa <handa@m17n.org>
parents: 47143
diff changeset
868 ccl->reg[2] = -1;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
869 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
870 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
871 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
872 ccl->reg[0] = charset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
873 ccl->reg[1] = char2b->byte1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
874 ccl->reg[2] = char2b->byte2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
875 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
876
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
877 ccl_driver (ccl, NULL, NULL, 0, 0, NULL);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
878
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
879 /* 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
880 program. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
881 if (font->max_byte1 == 0) /* 1-byte font */
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
882 char2b->byte1 = 0, char2b->byte2 = ccl->reg[1];
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
883 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
884 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
885 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
886 else if (font_info->encoding[charset])
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
887 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
888 /* 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
889 encoding numbers. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
890 int enc = font_info->encoding[charset];
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
891
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
892 if ((enc == 1 || enc == 2)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
893 && CHARSET_DIMENSION (charset) == 2)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
894 char2b->byte1 |= 0x80;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
895
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
896 if (enc == 1 || enc == 3)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
897 char2b->byte2 |= 0x80;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
898 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
899
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
900 if (two_byte_p)
50151
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
901 *two_byte_p = ((XFontStruct *) (font_info->font))->max_byte1 > 0;
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
902
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
903 return FONT_TYPE_UNKNOWN;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
904 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
905
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
906
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
907
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
908 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
909 Glyph display
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
910 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
911
50151
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
912
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
913
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
914 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
915 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
916 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
917 int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
918 static void x_draw_glyph_string_foreground P_ ((struct glyph_string *));
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
919 static void x_draw_composite_glyph_string_foreground P_ ((struct glyph_string *));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
920 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
921 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
922 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
923 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
924 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
925 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
926 static int x_alloc_lighter_color P_ ((struct frame *, Display *, Colormap,
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25921
diff changeset
927 unsigned long *, double, int));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
928 static void x_setup_relief_color P_ ((struct frame *, struct relief *,
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25921
diff changeset
929 double, int, unsigned long));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
930 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
931 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
932 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
933 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
934 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
935 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
936 int, int, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
937 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
938 int, int, int, int, XRectangle *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
939 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
940 int, int, int, XRectangle *));
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
941
29619
d171b4754825 (x_check_font) [GLYPH_DEBUG]: Add prototype.
Gerd Moellmann <gerd@gnu.org>
parents: 29600
diff changeset
942 #if GLYPH_DEBUG
d171b4754825 (x_check_font) [GLYPH_DEBUG]: Add prototype.
Gerd Moellmann <gerd@gnu.org>
parents: 29600
diff changeset
943 static void x_check_font P_ ((struct frame *, XFontStruct *));
d171b4754825 (x_check_font) [GLYPH_DEBUG]: Add prototype.
Gerd Moellmann <gerd@gnu.org>
parents: 29600
diff changeset
944 #endif
d171b4754825 (x_check_font) [GLYPH_DEBUG]: Add prototype.
Gerd Moellmann <gerd@gnu.org>
parents: 29600
diff changeset
945
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
946
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
947 /* 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
948 face. */
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 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
951 x_set_cursor_gc (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
952 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
953 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
954 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
955 && 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
956 && s->face->foreground == FRAME_FOREGROUND_PIXEL (s->f)
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
957 && !s->cmp)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
958 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
959 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
960 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
961 /* 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
962 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
963 unsigned long mask;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
964
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
965 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
966 xgcv.foreground = s->face->background;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
967
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
968 /* 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
969 if (xgcv.foreground == xgcv.background)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
970 xgcv.foreground = s->face->foreground;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
971 if (xgcv.foreground == xgcv.background)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
972 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
973 if (xgcv.foreground == xgcv.background)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
974 xgcv.foreground = s->face->foreground;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
975
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
976 /* 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
977 if (xgcv.background == s->face->background
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
978 && xgcv.foreground == s->face->foreground)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
979 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
980 xgcv.background = s->face->foreground;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
981 xgcv.foreground = s->face->background;
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 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
985 xgcv.font = s->font->fid;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
986 xgcv.graphics_exposures = False;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
987 mask = GCForeground | GCBackground | GCFont | GCGraphicsExposures;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
988
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
989 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
990 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
991 mask, &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
992 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
993 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
994 = 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
995
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
996 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
997 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1000
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1001 /* Set up S->gc of glyph string S for drawing text in mouse face. */
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1002
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1003 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1004 x_set_mouse_face_gc (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1005 struct glyph_string *s;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1006 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1007 int face_id;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1008 struct face *face;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1009
35315
1f5511b1d5ea (x_set_mouse_face_gc): If the last use mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 35309
diff changeset
1010 /* What face has to be used last for the mouse face? */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1011 face_id = FRAME_X_DISPLAY_INFO (s->f)->mouse_face_face_id;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1012 face = FACE_FROM_ID (s->f, face_id);
35315
1f5511b1d5ea (x_set_mouse_face_gc): If the last use mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 35309
diff changeset
1013 if (face == NULL)
1f5511b1d5ea (x_set_mouse_face_gc): If the last use mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 35309
diff changeset
1014 face = FACE_FROM_ID (s->f, MOUSE_FACE_ID);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1015
29393
3ad9354ade23 (x_set_mouse_face_gc): If first glyph isn't a character
Gerd Moellmann <gerd@gnu.org>
parents: 28793
diff changeset
1016 if (s->first_glyph->type == CHAR_GLYPH)
3ad9354ade23 (x_set_mouse_face_gc): If first glyph isn't a character
Gerd Moellmann <gerd@gnu.org>
parents: 28793
diff changeset
1017 face_id = FACE_FOR_CHAR (s->f, face, s->first_glyph->u.ch);
3ad9354ade23 (x_set_mouse_face_gc): If first glyph isn't a character
Gerd Moellmann <gerd@gnu.org>
parents: 28793
diff changeset
1018 else
3ad9354ade23 (x_set_mouse_face_gc): If first glyph isn't a character
Gerd Moellmann <gerd@gnu.org>
parents: 28793
diff changeset
1019 face_id = FACE_FOR_CHAR (s->f, face, 0);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1020 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
1021 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
1022
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1023 /* 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
1024 if (s->font == s->face->font)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1025 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1026 else
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 /* 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
1029 but font FONT. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1030 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1031 unsigned long mask;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1032
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1033 xgcv.background = s->face->background;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1034 xgcv.foreground = s->face->foreground;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1035 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
1036 xgcv.font = s->font->fid;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1037 xgcv.graphics_exposures = False;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1038 mask = GCForeground | GCBackground | GCFont | GCGraphicsExposures;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1039
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1040 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
1041 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
1042 mask, &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1043 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1044 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
1045 = XCreateGC (s->display, s->window, mask, &xgcv);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1046
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1047 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
1048 }
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 xassert (s->gc != 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1051 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1052
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1053
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1054 /* 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
1055 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
1056 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
1057
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1058 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1059 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
1060 struct glyph_string *s;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1061 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1062 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1063 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1064
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1065
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1066 /* 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
1067 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
1068 pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1069
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1070 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1071 x_set_glyph_string_gc (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1072 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1073 {
30137
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
1074 PREPARE_FACE_FOR_DISPLAY (s->f, s->face);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1075
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1076 if (s->hl == DRAW_NORMAL_TEXT)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1077 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1078 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1079 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
1080 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1081 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
1082 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1083 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
1084 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
1085 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1086 else if (s->hl == DRAW_CURSOR)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1087 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1088 x_set_cursor_gc (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1089 s->stippled_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1090 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1091 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
1092 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1093 x_set_mouse_face_gc (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1094 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
1095 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1096 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
1097 || s->hl == DRAW_IMAGE_SUNKEN)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1098 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1099 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1100 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
1101 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1102 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1103 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1104 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1105 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
1106 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1107
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1108 /* GC must have been set. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1109 xassert (s->gc != 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1110 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1111
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1112
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1113 /* 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
1114 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
1115
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1116 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1117 x_set_glyph_string_clipping (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1118 struct glyph_string *s;
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 XRectangle r;
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
1121 get_glyph_string_clip_rect (s, &r);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1122 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
1123 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1124
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1125
50151
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
1126 /* RIF:
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
1127 Compute left and right overhang of glyph string S. If S is a glyph
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1128 string for a composition, assume overhangs don't exist. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1129
50151
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
1130 static void
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1131 x_compute_glyph_string_overhangs (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1132 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1133 {
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1134 if (s->cmp == NULL
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1135 && s->first_glyph->type == CHAR_GLYPH)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1136 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1137 XCharStruct cs;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1138 int direction, font_ascent, font_descent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1139 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
1140 &font_ascent, &font_descent, &cs);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1141 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
1142 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
1143 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1144 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1145
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1146
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1147 /* 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
1148
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1149 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1150 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
1151 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1152 int x, y, w, h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1153 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1154 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1155 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
1156 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
1157 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
1158 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
1159 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1162 /* 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
1163 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
1164 background even if it wouldn't be drawn normally. This is used
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1165 when a string preceding S draws into the background of S, or S
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1166 contains the first component of a composition. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1167
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1168 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1169 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
1170 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1171 int force_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1172 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1173 /* 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
1174 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
1175 if (!s->background_filled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1176 {
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1177 int box_line_width = max (s->face->box_line_width, 0);
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1178
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1179 if (s->stippled_p)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1180 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1181 /* Fill background with a stipple pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1182 XSetFillStyle (s->display, s->gc, FillOpaqueStippled);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1183 XFillRectangle (s->display, s->window, s->gc, s->x,
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1184 s->y + box_line_width,
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1185 s->background_width,
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1186 s->height - 2 * box_line_width);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1187 XSetFillStyle (s->display, s->gc, FillSolid);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1188 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1189 }
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1190 else if (FONT_HEIGHT (s->font) < s->height - 2 * box_line_width
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1191 || s->font_not_found_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1192 || 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
1193 || force_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1194 {
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1195 x_clear_glyph_string_rect (s, s->x, s->y + box_line_width,
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1196 s->background_width,
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1197 s->height - 2 * box_line_width);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1198 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1199 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1200 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1201 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1202
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1203
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1204 /* 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
1205
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1206 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1207 x_draw_glyph_string_foreground (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1208 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1209 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1210 int i, x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1211
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1212 /* 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
1213 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
1214 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
1215 && s->first_glyph->left_box_line_p)
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1216 x = s->x + abs (s->face->box_line_width);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1217 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1218 x = s->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1219
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1220 /* Draw characters of S as rectangles if S's font could not be
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1221 loaded. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1222 if (s->font_not_found_p)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1223 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1224 for (i = 0; i < s->nchars; ++i)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1225 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1226 struct glyph *g = s->first_glyph + i;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1227 XDrawRectangle (s->display, s->window,
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1228 s->gc, x, s->y, g->pixel_width - 1,
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1229 s->height - 1);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1230 x += g->pixel_width;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1231 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1232 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1233 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1234 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1235 char *char1b = (char *) s->char2b;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1236 int boff = s->font_info->baseline_offset;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1237
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1238 if (s->font_info->vertical_centering)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1239 boff = VCENTER_BASELINE_OFFSET (s->font, s->f) - boff;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1240
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1241 /* If we can use 8-bit functions, condense S->char2b. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1242 if (!s->two_byte_p)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1243 for (i = 0; i < s->nchars; ++i)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1244 char1b[i] = s->char2b[i].byte2;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1245
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1246 /* Draw text with XDrawString if background has already been
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1247 filled. Otherwise, use XDrawImageString. (Note that
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1248 XDrawImageString is usually faster than XDrawString.) Always
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1249 use XDrawImageString when drawing the cursor so that there is
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1250 no chance that characters under a box cursor are invisible. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1251 if (s->for_overlaps_p
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1252 || (s->background_filled_p && s->hl != DRAW_CURSOR))
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1253 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1254 /* Draw characters with 16-bit or 8-bit functions. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1255 if (s->two_byte_p)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1256 XDrawString16 (s->display, s->window, s->gc, x,
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1257 s->ybase - boff, s->char2b, s->nchars);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1258 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1259 XDrawString (s->display, s->window, s->gc, x,
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1260 s->ybase - boff, char1b, s->nchars);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1261 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1262 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1263 {
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1264 if (s->two_byte_p)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1265 XDrawImageString16 (s->display, s->window, s->gc, x,
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1266 s->ybase - boff, s->char2b, s->nchars);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
1267 else
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1268 XDrawImageString (s->display, s->window, s->gc, x,
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1269 s->ybase - boff, char1b, s->nchars);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1270 }
48383
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1271
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1272 if (s->face->overstrike)
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1273 {
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1274 /* For overstriking (to simulate bold-face), draw the
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1275 characters again shifted to the right by one pixel. */
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1276 if (s->two_byte_p)
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1277 XDrawString16 (s->display, s->window, s->gc, x + 1,
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1278 s->ybase - boff, s->char2b, s->nchars);
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1279 else
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1280 XDrawString (s->display, s->window, s->gc, x + 1,
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1281 s->ybase - boff, char1b, s->nchars);
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1282 }
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1283 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1284 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1285
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1286 /* Draw the foreground of composite glyph string S. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1287
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1288 static void
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1289 x_draw_composite_glyph_string_foreground (s)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1290 struct glyph_string *s;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1291 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1292 int i, x;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1293
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1294 /* If first glyph of S has a left box line, start drawing the text
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1295 of S to the right of that box line. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1296 if (s->face->box != FACE_NO_BOX
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1297 && s->first_glyph->left_box_line_p)
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1298 x = s->x + abs (s->face->box_line_width);
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1299 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1300 x = s->x;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1301
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1302 /* S is a glyph string for a composition. S->gidx is the index of
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1303 the first character drawn for glyphs of this composition.
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1304 S->gidx == 0 means we are drawing the very first character of
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1305 this composition. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1306
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1307 /* Draw a rectangle for the composition if the font for the very
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1308 first character of the composition could not be loaded. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1309 if (s->font_not_found_p)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1310 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1311 if (s->gidx == 0)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1312 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
1313 s->width - 1, s->height - 1);
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1314 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1315 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1316 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1317 for (i = 0; i < s->nchars; i++, ++s->gidx)
48383
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1318 {
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1319 XDrawString16 (s->display, s->window, s->gc,
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1320 x + s->cmp->offsets[s->gidx * 2],
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1321 s->ybase - s->cmp->offsets[s->gidx * 2 + 1],
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1322 s->char2b + i, 1);
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1323 if (s->face->overstrike)
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1324 XDrawString16 (s->display, s->window, s->gc,
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1325 x + s->cmp->offsets[s->gidx * 2] + 1,
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1326 s->ybase - s->cmp->offsets[s->gidx * 2 + 1],
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1327 s->char2b + i, 1);
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1328 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1329 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1330 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1331
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1332
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1333 #ifdef USE_X_TOOLKIT
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1334
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1335 static struct frame *x_frame_of_widget P_ ((Widget));
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1336 static Boolean cvt_string_to_pixel P_ ((Display *, XrmValue *, Cardinal *,
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1337 XrmValue *, XrmValue *, XtPointer *));
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1338 static void cvt_pixel_dtor P_ ((XtAppContext, XrmValue *, XtPointer,
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1339 XrmValue *, Cardinal *));
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1340
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1341
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1342 /* Return the frame on which widget WIDGET is used.. Abort if frame
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1343 cannot be determined. */
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1344
29749
4235764941b5 (x_frame_of_widget): Add `static' to declaration (for pcc).
Dave Love <fx@gnu.org>
parents: 29744
diff changeset
1345 static struct frame *
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1346 x_frame_of_widget (widget)
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1347 Widget widget;
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1348 {
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1349 struct x_display_info *dpyinfo;
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
1350 Lisp_Object tail;
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1351 struct frame *f;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1352
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1353 dpyinfo = x_display_info_for_display (XtDisplay (widget));
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1354
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1355 /* Find the top-level shell of the widget. Note that this function
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1356 can be called when the widget is not yet realized, so XtWindow
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1357 (widget) == 0. That's the reason we can't simply use
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1358 x_any_window_to_frame. */
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1359 while (!XtIsTopLevelShell (widget))
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1360 widget = XtParent (widget);
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1361
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1362 /* Look for a frame with that top-level widget. Allocate the color
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1363 on that frame to get the right gamma correction value. */
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1364 for (tail = Vframe_list; GC_CONSP (tail); tail = XCDR (tail))
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1365 if (GC_FRAMEP (XCAR (tail))
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1366 && (f = XFRAME (XCAR (tail)),
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1367 (f->output_data.nothing != 1
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1368 && FRAME_X_DISPLAY_INFO (f) == dpyinfo))
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1369 && f->output_data.x->widget == widget)
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1370 return f;
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1371
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1372 abort ();
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1373 }
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1374
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1375
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1376 /* Allocate the color COLOR->pixel on the screen and display of
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1377 widget WIDGET in colormap CMAP. If an exact match cannot be
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1378 allocated, try the nearest color available. Value is non-zero
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1379 if successful. This is called from lwlib. */
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1380
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1381 int
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1382 x_alloc_nearest_color_for_widget (widget, cmap, color)
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1383 Widget widget;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1384 Colormap cmap;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1385 XColor *color;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1386 {
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1387 struct frame *f = x_frame_of_widget (widget);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1388 return x_alloc_nearest_color (f, cmap, color);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1389 }
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1390
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1391
31340
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1392 /* Allocate a color which is lighter or darker than *PIXEL by FACTOR
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1393 or DELTA. Try a color with RGB values multiplied by FACTOR first.
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1394 If this produces the same color as PIXEL, try a color where all RGB
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1395 values have DELTA added. Return the allocated color in *PIXEL.
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1396 DISPLAY is the X display, CMAP is the colormap to operate on.
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1397 Value is non-zero if successful. */
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1398
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1399 int
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1400 x_alloc_lighter_color_for_widget (widget, display, cmap, pixel, factor, delta)
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1401 Widget widget;
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1402 Display *display;
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1403 Colormap cmap;
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1404 unsigned long *pixel;
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1405 double factor;
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1406 int delta;
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1407 {
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1408 struct frame *f = x_frame_of_widget (widget);
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1409 return x_alloc_lighter_color (f, display, cmap, pixel, factor, delta);
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1410 }
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1411
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1412
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1413 /* Structure specifying which arguments should be passed by Xt to
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1414 cvt_string_to_pixel. We want the widget's screen and colormap. */
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1415
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1416 static XtConvertArgRec cvt_string_to_pixel_args[] =
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1417 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1418 {XtWidgetBaseOffset, (XtPointer) XtOffset (Widget, core.screen),
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1419 sizeof (Screen *)},
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1420 {XtWidgetBaseOffset, (XtPointer) XtOffset (Widget, core.colormap),
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1421 sizeof (Colormap)}
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1422 };
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1423
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1424
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1425 /* The address of this variable is returned by
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1426 cvt_string_to_pixel. */
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1427
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1428 static Pixel cvt_string_to_pixel_value;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1429
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1430
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1431 /* Convert a color name to a pixel color.
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1432
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1433 DPY is the display we are working on.
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1434
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1435 ARGS is an array of *NARGS XrmValue structures holding additional
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1436 information about the widget for which the conversion takes place.
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1437 The contents of this array are determined by the specification
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1438 in cvt_string_to_pixel_args.
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1439
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1440 FROM is a pointer to an XrmValue which points to the color name to
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1441 convert. TO is an XrmValue in which to return the pixel color.
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1442
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1443 CLOSURE_RET is a pointer to user-data, in which we record if
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1444 we allocated the color or not.
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1445
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1446 Value is True if successful, False otherwise. */
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1447
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1448 static Boolean
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1449 cvt_string_to_pixel (dpy, args, nargs, from, to, closure_ret)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1450 Display *dpy;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1451 XrmValue *args;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1452 Cardinal *nargs;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1453 XrmValue *from, *to;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1454 XtPointer *closure_ret;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1455 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1456 Screen *screen;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1457 Colormap cmap;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1458 Pixel pixel;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1459 String color_name;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1460 XColor color;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1461
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1462 if (*nargs != 2)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1463 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1464 XtAppWarningMsg (XtDisplayToApplicationContext (dpy),
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1465 "wrongParameters", "cvt_string_to_pixel",
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1466 "XtToolkitError",
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1467 "Screen and colormap args required", NULL, NULL);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1468 return False;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1469 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1470
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1471 screen = *(Screen **) args[0].addr;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1472 cmap = *(Colormap *) args[1].addr;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1473 color_name = (String) from->addr;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1474
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1475 if (strcmp (color_name, XtDefaultBackground) == 0)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1476 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1477 *closure_ret = (XtPointer) False;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1478 pixel = WhitePixelOfScreen (screen);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1479 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1480 else if (strcmp (color_name, XtDefaultForeground) == 0)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1481 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1482 *closure_ret = (XtPointer) False;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1483 pixel = BlackPixelOfScreen (screen);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1484 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1485 else if (XParseColor (dpy, cmap, color_name, &color)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1486 && x_alloc_nearest_color_1 (dpy, cmap, &color))
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1487 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1488 pixel = color.pixel;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1489 *closure_ret = (XtPointer) True;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1490 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1491 else
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1492 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1493 String params[1];
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1494 Cardinal nparams = 1;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1495
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1496 params[0] = color_name;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1497 XtAppWarningMsg (XtDisplayToApplicationContext (dpy),
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1498 "badValue", "cvt_string_to_pixel",
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1499 "XtToolkitError", "Invalid color `%s'",
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1500 params, &nparams);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1501 return False;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1502 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1503
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1504 if (to->addr != NULL)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1505 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1506 if (to->size < sizeof (Pixel))
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1507 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1508 to->size = sizeof (Pixel);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1509 return False;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1510 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1511
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1512 *(Pixel *) to->addr = pixel;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1513 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1514 else
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1515 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1516 cvt_string_to_pixel_value = pixel;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1517 to->addr = (XtPointer) &cvt_string_to_pixel_value;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1518 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1519
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1520 to->size = sizeof (Pixel);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1521 return True;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1522 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1523
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1524
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1525 /* Free a pixel color which was previously allocated via
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1526 cvt_string_to_pixel. This is registered as the destructor
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1527 for this type of resource via XtSetTypeConverter.
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1528
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1529 APP is the application context in which we work.
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1530
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1531 TO is a pointer to an XrmValue holding the color to free.
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1532 CLOSURE is the value we stored in CLOSURE_RET for this color
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1533 in cvt_string_to_pixel.
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1534
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1535 ARGS and NARGS are like for cvt_string_to_pixel. */
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1536
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1537 static void
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1538 cvt_pixel_dtor (app, to, closure, args, nargs)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1539 XtAppContext app;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1540 XrmValuePtr to;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1541 XtPointer closure;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1542 XrmValuePtr args;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1543 Cardinal *nargs;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1544 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1545 if (*nargs != 2)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1546 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1547 XtAppWarningMsg (app, "wrongParameters", "cvt_pixel_dtor",
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1548 "XtToolkitError",
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1549 "Screen and colormap arguments required",
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1550 NULL, NULL);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1551 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1552 else if (closure != NULL)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1553 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1554 /* We did allocate the pixel, so free it. */
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1555 Screen *screen = *(Screen **) args[0].addr;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1556 Colormap cmap = *(Colormap *) args[1].addr;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1557 x_free_dpy_colors (DisplayOfScreen (screen), screen, cmap,
38255
9ec233999747 * xterm.c (cvt_pixel_dtor): Call x_free_dpy_colors with the
Gerd Moellmann <gerd@gnu.org>
parents: 38246
diff changeset
1558 (Pixel *) to->addr, 1);
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1559 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1560 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1561
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1562
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1563 #endif /* USE_X_TOOLKIT */
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1564
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1565
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1566 /* Value is an array of XColor structures for the contents of the
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1567 color map of display DPY. Set *NCELLS to the size of the array.
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1568 Note that this probably shouldn't be called for large color maps,
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1569 say a 24-bit TrueColor map. */
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1570
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1571 static const XColor *
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1572 x_color_cells (dpy, ncells)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1573 Display *dpy;
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1574 int *ncells;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1575 {
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1576 struct x_display_info *dpyinfo = x_display_info_for_display (dpy);
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1577
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1578 if (dpyinfo->color_cells == NULL)
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1579 {
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1580 Screen *screen = dpyinfo->screen;
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1581 int i;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1582
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1583 dpyinfo->ncolor_cells
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1584 = XDisplayCells (dpy, XScreenNumberOfScreen (screen));
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1585 dpyinfo->color_cells
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1586 = (XColor *) xmalloc (dpyinfo->ncolor_cells
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1587 * sizeof *dpyinfo->color_cells);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1588
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1589 for (i = 0; i < dpyinfo->ncolor_cells; ++i)
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1590 dpyinfo->color_cells[i].pixel = i;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1591
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1592 XQueryColors (dpy, dpyinfo->cmap,
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1593 dpyinfo->color_cells, dpyinfo->ncolor_cells);
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1594 }
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1595
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1596 *ncells = dpyinfo->ncolor_cells;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1597 return dpyinfo->color_cells;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1598 }
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1599
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1600
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1601 /* On frame F, translate pixel colors to RGB values for the NCOLORS
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1602 colors in COLORS. Use cached information, if available. */
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1603
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1604 void
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1605 x_query_colors (f, colors, ncolors)
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1606 struct frame *f;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1607 XColor *colors;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1608 int ncolors;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1609 {
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1610 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1611
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1612 if (dpyinfo->color_cells)
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1613 {
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1614 int i;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1615 for (i = 0; i < ncolors; ++i)
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1616 {
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1617 unsigned long pixel = colors[i].pixel;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1618 xassert (pixel < dpyinfo->ncolor_cells);
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1619 xassert (dpyinfo->color_cells[pixel].pixel == pixel);
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1620 colors[i] = dpyinfo->color_cells[pixel];
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1621 }
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1622 }
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1623 else
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1624 XQueryColors (FRAME_X_DISPLAY (f), FRAME_X_COLORMAP (f), colors, ncolors);
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1625 }
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1626
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1627
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1628 /* On frame F, translate pixel color to RGB values for the color in
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1629 COLOR. Use cached information, if available. */
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1630
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1631 void
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1632 x_query_color (f, color)
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1633 struct frame *f;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1634 XColor *color;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1635 {
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1636 x_query_colors (f, color, 1);
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1637 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1638
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1639
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1640 /* Allocate the color COLOR->pixel on DISPLAY, colormap CMAP. If an
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1641 exact match can't be allocated, try the nearest color available.
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1642 Value is non-zero if successful. Set *COLOR to the color
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1643 allocated. */
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1644
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1645 static int
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1646 x_alloc_nearest_color_1 (dpy, cmap, color)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1647 Display *dpy;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1648 Colormap cmap;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1649 XColor *color;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1650 {
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1651 int rc;
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1652
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1653 rc = XAllocColor (dpy, cmap, color);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1654 if (rc == 0)
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 /* 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
1657 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
1658 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
1659 color matching with StaticColor visuals. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1660 int nearest, i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1661 unsigned long nearest_delta = ~0;
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1662 int ncells;
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1663 const XColor *cells = x_color_cells (dpy, &ncells);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1664
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1665 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
1666 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1667 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
1668 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
1669 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
1670 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
1671
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1672 if (delta < nearest_delta)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1673 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1674 nearest = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1675 nearest_delta = delta;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1676 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1677 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1678
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1679 color->red = cells[nearest].red;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1680 color->green = cells[nearest].green;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1681 color->blue = cells[nearest].blue;
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1682 rc = XAllocColor (dpy, cmap, color);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1683 }
33062
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
1684 else
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
1685 {
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
1686 /* If allocation succeeded, and the allocated pixel color is not
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
1687 equal to a cached pixel color recorded earlier, there was a
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
1688 change in the colormap, so clear the color cache. */
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1689 struct x_display_info *dpyinfo = x_display_info_for_display (dpy);
33062
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
1690 XColor *cached_color;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1691
33062
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
1692 if (dpyinfo->color_cells
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
1693 && (cached_color = &dpyinfo->color_cells[color->pixel],
33064
9de33d895c6c (x_alloc_nearest_color): Fix last change to compare
Gerd Moellmann <gerd@gnu.org>
parents: 33062
diff changeset
1694 (cached_color->red != color->red
9de33d895c6c (x_alloc_nearest_color): Fix last change to compare
Gerd Moellmann <gerd@gnu.org>
parents: 33062
diff changeset
1695 || cached_color->blue != color->blue
9de33d895c6c (x_alloc_nearest_color): Fix last change to compare
Gerd Moellmann <gerd@gnu.org>
parents: 33062
diff changeset
1696 || cached_color->green != color->green)))
33062
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
1697 {
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
1698 xfree (dpyinfo->color_cells);
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
1699 dpyinfo->color_cells = NULL;
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
1700 dpyinfo->ncolor_cells = 0;
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
1701 }
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
1702 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1703
28356
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1704 #ifdef DEBUG_X_COLORS
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1705 if (rc)
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1706 register_color (color->pixel);
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1707 #endif /* DEBUG_X_COLORS */
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1708
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1709 return rc;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1712
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1713 /* Allocate the color COLOR->pixel on frame F, colormap CMAP. If an
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1714 exact match can't be allocated, try the nearest color available.
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1715 Value is non-zero if successful. Set *COLOR to the color
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1716 allocated. */
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1717
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1718 int
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1719 x_alloc_nearest_color (f, cmap, color)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1720 struct frame *f;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1721 Colormap cmap;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1722 XColor *color;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1723 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1724 gamma_correct (f, color);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1725 return x_alloc_nearest_color_1 (FRAME_X_DISPLAY (f), cmap, color);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1726 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1727
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1728
28356
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1729 /* Allocate color PIXEL on frame F. PIXEL must already be allocated.
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1730 It's necessary to do this instead of just using PIXEL directly to
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1731 get color reference counts right. */
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1732
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1733 unsigned long
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1734 x_copy_color (f, pixel)
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1735 struct frame *f;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1736 unsigned long pixel;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1737 {
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1738 XColor color;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1739
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1740 color.pixel = pixel;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1741 BLOCK_INPUT;
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1742 x_query_color (f, &color);
28356
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1743 XAllocColor (FRAME_X_DISPLAY (f), FRAME_X_COLORMAP (f), &color);
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1744 UNBLOCK_INPUT;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1745 #ifdef DEBUG_X_COLORS
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1746 register_color (pixel);
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1747 #endif
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1748 return color.pixel;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1749 }
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1750
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1751
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1752 /* Allocate color PIXEL on display DPY. PIXEL must already be allocated.
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1753 It's necessary to do this instead of just using PIXEL directly to
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1754 get color reference counts right. */
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1755
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1756 unsigned long
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1757 x_copy_dpy_color (dpy, cmap, pixel)
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1758 Display *dpy;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1759 Colormap cmap;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1760 unsigned long pixel;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1761 {
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1762 XColor color;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1763
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1764 color.pixel = pixel;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1765 BLOCK_INPUT;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1766 XQueryColor (dpy, cmap, &color);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1767 XAllocColor (dpy, cmap, &color);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1768 UNBLOCK_INPUT;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1769 #ifdef DEBUG_X_COLORS
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1770 register_color (pixel);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1771 #endif
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1772 return color.pixel;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1773 }
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1774
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1775
33456
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
1776 /* Brightness beyond which a color won't have its highlight brightness
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
1777 boosted.
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
1778
33449
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1779 Nominally, highlight colors for `3d' faces are calculated by
33456
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
1780 brightening an object's color by a constant scale factor, but this
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
1781 doesn't yield good results for dark colors, so for colors who's
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
1782 brightness is less than this value (on a scale of 0-65535) have an
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
1783 use an additional additive factor.
33449
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1784
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1785 The value here is set so that the default menu-bar/mode-line color
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1786 (grey75) will not have its highlights changed at all. */
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1787 #define HIGHLIGHT_COLOR_DARK_BOOST_LIMIT 48000
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1788
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1789
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1790 /* 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
1791 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
1792 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
1793 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
1794 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
1795 Value is non-zero if successful. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1796
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1797 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1798 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
1799 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1800 Display *display;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1801 Colormap cmap;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1802 unsigned long *pixel;
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25921
diff changeset
1803 double factor;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1804 int delta;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1805 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1806 XColor color, new;
33449
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1807 long bright;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1808 int success_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1809
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1810 /* Get RGB color values. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1811 color.pixel = *pixel;
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1812 x_query_color (f, &color);
24991
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 /* 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
1815 xassert (factor >= 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1816 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
1817 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
1818 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
1819
33456
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
1820 /* Calculate brightness of COLOR. */
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
1821 bright = (2 * color.red + 3 * color.green + color.blue) / 6;
33449
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1822
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1823 /* We only boost colors that are darker than
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1824 HIGHLIGHT_COLOR_DARK_BOOST_LIMIT. */
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1825 if (bright < HIGHLIGHT_COLOR_DARK_BOOST_LIMIT)
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1826 /* Make an additive adjustment to NEW, because it's dark enough so
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1827 that scaling by FACTOR alone isn't enough. */
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1828 {
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1829 /* How far below the limit this color is (0 - 1, 1 being darker). */
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1830 double dimness = 1 - (double)bright / HIGHLIGHT_COLOR_DARK_BOOST_LIMIT;
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1831 /* The additive adjustment. */
33456
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
1832 int min_delta = delta * dimness * factor / 2;
33449
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1833
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1834 if (factor < 1)
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1835 {
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1836 new.red = max (0, new.red - min_delta);
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1837 new.green = max (0, new.green - min_delta);
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1838 new.blue = max (0, new.blue - min_delta);
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1839 }
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1840 else
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1841 {
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1842 new.red = min (0xffff, min_delta + new.red);
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1843 new.green = min (0xffff, min_delta + new.green);
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1844 new.blue = min (0xffff, min_delta + new.blue);
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1845 }
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1846 }
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1847
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1848 /* Try to allocate the color. */
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1849 success_p = x_alloc_nearest_color (f, cmap, &new);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1850 if (success_p)
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 if (new.pixel == *pixel)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1853 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1854 /* 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
1855 delta to the RGB values. */
27962
048184bb751e (x_alloc_lighter_color, x_setup_relief_color): Use
Gerd Moellmann <gerd@gnu.org>
parents: 27857
diff changeset
1856 x_free_colors (f, &new.pixel, 1);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1857
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1858 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
1859 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
1860 new.blue = min (0xffff, delta + color.blue);
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1861 success_p = x_alloc_nearest_color (f, cmap, &new);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1862 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1863 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1864 success_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1865 *pixel = new.pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1866 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1867
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1868 return success_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1869 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1870
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 /* 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
1873 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
1874 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
1875 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
1876 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
1877 be allocated, use DEFAULT_PIXEL, instead. */
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1878
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1879 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1880 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
1881 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1882 struct relief *relief;
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25921
diff changeset
1883 double factor;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1884 int delta;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1885 unsigned long default_pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1886 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1887 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1888 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
1889 unsigned long mask = GCForeground | GCLineWidth | GCGraphicsExposures;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1890 unsigned long pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1891 unsigned long background = di->relief_background;
27985
4ba445af210b (x_term_init): Set Colormap member of x_display_info
Gerd Moellmann <gerd@gnu.org>
parents: 27974
diff changeset
1892 Colormap cmap = FRAME_X_COLORMAP (f);
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
1893 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
1894 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
1895
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1896 xgcv.graphics_exposures = False;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1897 xgcv.line_width = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1898
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1899 /* 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
1900 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
1901 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
1902 if (relief->gc
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1903 && relief->allocated_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1904 {
27962
048184bb751e (x_alloc_lighter_color, x_setup_relief_color): Use
Gerd Moellmann <gerd@gnu.org>
parents: 27857
diff changeset
1905 x_free_colors (f, &relief->pixel, 1);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1906 relief->allocated_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1907 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1908
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1909 /* Allocate new color. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1910 xgcv.foreground = default_pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1911 pixel = background;
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
1912 if (dpyinfo->n_planes != 1
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
1913 && 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
1914 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1915 relief->allocated_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1916 xgcv.foreground = relief->pixel = pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1917 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1918
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1919 if (relief->gc == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1920 {
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
1921 xgcv.stipple = dpyinfo->gray;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1922 mask |= GCStipple;
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
1923 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
1924 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1925 else
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
1926 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
1927 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1928
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1929
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1930 /* 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
1931
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1932 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1933 x_setup_relief_colors (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1934 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1935 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1936 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
1937 unsigned long color;
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 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
1940 color = s->face->box_color;
40265
44df655be97a (x_setup_relief_colors): Use `IMAGE_BACKGROUND' and
Miles Bader <miles@gnu.org>
parents: 40259
diff changeset
1941 else if (s->first_glyph->type == IMAGE_GLYPH
42376
0f408d016a15 (x_setup_relief_colors): Don't compute an image's
Gerd Moellmann <gerd@gnu.org>
parents: 42374
diff changeset
1942 && s->img->pixmap
40265
44df655be97a (x_setup_relief_colors): Use `IMAGE_BACKGROUND' and
Miles Bader <miles@gnu.org>
parents: 40259
diff changeset
1943 && !IMAGE_BACKGROUND_TRANSPARENT (s->img, s->f, 0))
44df655be97a (x_setup_relief_colors): Use `IMAGE_BACKGROUND' and
Miles Bader <miles@gnu.org>
parents: 40259
diff changeset
1944 color = IMAGE_BACKGROUND (s->img, s->f, 0);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1945 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1946 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1947 XGCValues xgcv;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1948
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1949 /* 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
1950 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
1951 color = xgcv.background;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1952 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1953
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1954 if (di->white_relief.gc == 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1955 || color != di->relief_background)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1956 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1957 di->relief_background = color;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1958 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
1959 WHITE_PIX_DEFAULT (s->f));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1960 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
1961 BLACK_PIX_DEFAULT (s->f));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1962 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1963 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1964
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1965
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1966 /* 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
1967 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
1968 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
1969 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
1970 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
1971 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
1972 when drawing. */
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 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1975 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
1976 raised_p, left_p, right_p, clip_rect)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
1977 struct frame *f;
48330
e5d539ae9468 (x_draw_relief_rect, x_draw_box_rect, x_update_cursor):
Dave Love <fx@gnu.org>
parents: 48169
diff changeset
1978 int left_x, top_y, right_x, bottom_y, width, left_p, right_p, raised_p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1979 XRectangle *clip_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1980 {
39474
5f9f7d59fd79 (x_draw_relief_rect): Draw bottom relief 1 pixel more
Gerd Moellmann <gerd@gnu.org>
parents: 39434
diff changeset
1981 Display *dpy = FRAME_X_DISPLAY (f);
5f9f7d59fd79 (x_draw_relief_rect): Draw bottom relief 1 pixel more
Gerd Moellmann <gerd@gnu.org>
parents: 39434
diff changeset
1982 Window window = FRAME_X_WINDOW (f);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1983 int i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1984 GC gc;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1985
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1986 if (raised_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1987 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
1988 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1989 gc = f->output_data.x->black_relief.gc;
39474
5f9f7d59fd79 (x_draw_relief_rect): Draw bottom relief 1 pixel more
Gerd Moellmann <gerd@gnu.org>
parents: 39434
diff changeset
1990 XSetClipRectangles (dpy, gc, 0, 0, clip_rect, 1, Unsorted);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1992 /* Top. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1993 for (i = 0; i < width; ++i)
39474
5f9f7d59fd79 (x_draw_relief_rect): Draw bottom relief 1 pixel more
Gerd Moellmann <gerd@gnu.org>
parents: 39434
diff changeset
1994 XDrawLine (dpy, window, gc,
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1995 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
1996 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
1997
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1998 /* Left. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1999 if (left_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2000 for (i = 0; i < width; ++i)
39474
5f9f7d59fd79 (x_draw_relief_rect): Draw bottom relief 1 pixel more
Gerd Moellmann <gerd@gnu.org>
parents: 39434
diff changeset
2001 XDrawLine (dpy, window, gc,
37033
fe7885cc9458 (x_draw_relief_rect): Extend left shadow to the
Gerd Moellmann <gerd@gnu.org>
parents: 37031
diff changeset
2002 left_x + i, top_y + i, left_x + i, bottom_y - i + 1);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2003
39474
5f9f7d59fd79 (x_draw_relief_rect): Draw bottom relief 1 pixel more
Gerd Moellmann <gerd@gnu.org>
parents: 39434
diff changeset
2004 XSetClipMask (dpy, gc, None);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2005 if (raised_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2006 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
2007 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2008 gc = f->output_data.x->white_relief.gc;
39474
5f9f7d59fd79 (x_draw_relief_rect): Draw bottom relief 1 pixel more
Gerd Moellmann <gerd@gnu.org>
parents: 39434
diff changeset
2009 XSetClipRectangles (dpy, gc, 0, 0, clip_rect, 1, Unsorted);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2010
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2011 /* Bottom. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2012 for (i = 0; i < width; ++i)
39474
5f9f7d59fd79 (x_draw_relief_rect): Draw bottom relief 1 pixel more
Gerd Moellmann <gerd@gnu.org>
parents: 39434
diff changeset
2013 XDrawLine (dpy, window, gc,
5f9f7d59fd79 (x_draw_relief_rect): Draw bottom relief 1 pixel more
Gerd Moellmann <gerd@gnu.org>
parents: 39434
diff changeset
2014 left_x + i * left_p, bottom_y - i,
40499
55065421f9e7 (x_draw_relief_rect): Correct bottom relief by 1 pixel.
Gerd Moellmann <gerd@gnu.org>
parents: 40446
diff changeset
2015 right_x + 1 - i * right_p, bottom_y - i);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2016
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2017 /* Right. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2018 if (right_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2019 for (i = 0; i < width; ++i)
39474
5f9f7d59fd79 (x_draw_relief_rect): Draw bottom relief 1 pixel more
Gerd Moellmann <gerd@gnu.org>
parents: 39434
diff changeset
2020 XDrawLine (dpy, window, gc,
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2021 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
2022
39474
5f9f7d59fd79 (x_draw_relief_rect): Draw bottom relief 1 pixel more
Gerd Moellmann <gerd@gnu.org>
parents: 39434
diff changeset
2023 XSetClipMask (dpy, gc, None);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2024 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2025
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2026
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2027 /* 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
2028 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
2029 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
2030 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
2031 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
2032 rectangle to use when drawing. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2033
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2034 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2035 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
2036 left_p, right_p, clip_rect)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2037 struct glyph_string *s;
48330
e5d539ae9468 (x_draw_relief_rect, x_draw_box_rect, x_update_cursor):
Dave Love <fx@gnu.org>
parents: 48169
diff changeset
2038 int left_x, top_y, right_x, bottom_y, width, left_p, right_p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2039 XRectangle *clip_rect;
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 XGCValues xgcv;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2042
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2043 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
2044 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
2045 XSetClipRectangles (s->display, s->gc, 0, 0, clip_rect, 1, Unsorted);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2046
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2047 /* Top. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2048 XFillRectangle (s->display, s->window, s->gc,
32513
545db232e60c (x_draw_box_rect): Fix the calculation of width and height for
Kenichi Handa <handa@m17n.org>
parents: 32401
diff changeset
2049 left_x, top_y, right_x - left_x + 1, width);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2050
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2051 /* Left. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2052 if (left_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2053 XFillRectangle (s->display, s->window, s->gc,
32513
545db232e60c (x_draw_box_rect): Fix the calculation of width and height for
Kenichi Handa <handa@m17n.org>
parents: 32401
diff changeset
2054 left_x, top_y, width, bottom_y - top_y + 1);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2055
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2056 /* Bottom. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2057 XFillRectangle (s->display, s->window, s->gc,
32513
545db232e60c (x_draw_box_rect): Fix the calculation of width and height for
Kenichi Handa <handa@m17n.org>
parents: 32401
diff changeset
2058 left_x, bottom_y - width + 1, right_x - left_x + 1, width);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2059
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2060 /* Right. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2061 if (right_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2062 XFillRectangle (s->display, s->window, s->gc,
32513
545db232e60c (x_draw_box_rect): Fix the calculation of width and height for
Kenichi Handa <handa@m17n.org>
parents: 32401
diff changeset
2063 right_x - width + 1, top_y, width, bottom_y - top_y + 1);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2064
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2065 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
2066 XSetClipMask (s->display, s->gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2067 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2068
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 /* 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
2071
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2072 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2073 x_draw_glyph_string_box (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2074 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2075 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2076 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
2077 int left_p, right_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2078 struct glyph *last_glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2079 XRectangle clip_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2080
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2081 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
2082 if (s->row->full_width_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2083 && !s->w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2084 {
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
2085 last_x += WINDOW_RIGHT_SCROLL_BAR_AREA_WIDTH (s->w);
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
2086 if (s->area != RIGHT_MARGIN_AREA
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
2087 || WINDOW_HAS_FRINGES_OUTSIDE_MARGINS (s->w))
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
2088 last_x += WINDOW_RIGHT_FRINGE_WIDTH (s->w);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2089 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2090
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2091 /* The glyph that may have a right box line. */
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2092 last_glyph = (s->cmp || s->img
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2093 ? s->first_glyph
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2094 : s->first_glyph + s->nchars - 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2095
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2096 width = abs (s->face->box_line_width);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2097 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
2098 left_x = s->x;
36795
e7722a221c28 (x_draw_glyph_string_box): Don't draw a full-width
Gerd Moellmann <gerd@gnu.org>
parents: 36776
diff changeset
2099 right_x = (s->row->full_width_p && s->extends_to_end_of_line_p
e7722a221c28 (x_draw_glyph_string_box): Don't draw a full-width
Gerd Moellmann <gerd@gnu.org>
parents: 36776
diff changeset
2100 ? last_x - 1
e7722a221c28 (x_draw_glyph_string_box): Don't draw a full-width
Gerd Moellmann <gerd@gnu.org>
parents: 36776
diff changeset
2101 : min (last_x, s->x + s->background_width) - 1);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2102 top_y = s->y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2103 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
2104
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2105 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
2106 || (s->hl == DRAW_MOUSE_FACE
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2107 && (s->prev == NULL
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2108 || s->prev->hl != s->hl)));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2109 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
2110 || (s->hl == DRAW_MOUSE_FACE
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2111 && (s->next == NULL
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2112 || s->next->hl != s->hl)));
40499
55065421f9e7 (x_draw_relief_rect): Correct bottom relief by 1 pixel.
Gerd Moellmann <gerd@gnu.org>
parents: 40446
diff changeset
2113
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
2114 get_glyph_string_clip_rect (s, &clip_rect);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2115
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2116 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
2117 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
2118 left_p, right_p, &clip_rect);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2119 else
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 x_setup_relief_colors (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2122 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
2123 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
2124 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2125 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2126
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2127
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2128 /* 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
2129
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2130 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2131 x_draw_image_foreground (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2132 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2133 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2134 int x;
28785
796eafcfc070 (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 28686
diff changeset
2135 int y = s->ybase - image_ascent (s->img, s->face);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2136
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2137 /* 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
2138 right of that line. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2139 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
2140 && s->first_glyph->left_box_line_p)
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2141 x = s->x + abs (s->face->box_line_width);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2142 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2143 x = s->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2144
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2145 /* 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
2146 by that margin. */
35276
008aea836cbc (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 35272
diff changeset
2147 x += s->img->hmargin;
008aea836cbc (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 35272
diff changeset
2148 y += s->img->vmargin;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2149
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2150 if (s->img->pixmap)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2151 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2152 if (s->img->mask)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2153 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2154 /* 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
2155 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
2156 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
2157 (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
2158 manually. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2159 unsigned long mask = (GCClipMask | GCClipXOrigin | GCClipYOrigin
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2160 | GCFunction);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2161 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2162 XRectangle clip_rect, image_rect, r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2163
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2164 xgcv.clip_mask = s->img->mask;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2165 xgcv.clip_x_origin = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2166 xgcv.clip_y_origin = y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2167 xgcv.function = GXcopy;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2168 XChangeGC (s->display, s->gc, mask, &xgcv);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2169
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
2170 get_glyph_string_clip_rect (s, &clip_rect);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2171 image_rect.x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2172 image_rect.y = y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2173 image_rect.width = s->img->width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2174 image_rect.height = s->img->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2175 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
2176 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
2177 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
2178 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2179 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2180 {
30653
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
2181 XRectangle clip_rect, image_rect, r;
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
2182
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
2183 get_glyph_string_clip_rect (s, &clip_rect);
30653
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
2184 image_rect.x = x;
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
2185 image_rect.y = y;
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
2186 image_rect.width = s->img->width;
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
2187 image_rect.height = s->img->height;
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
2188 if (x_intersect_rectangles (&clip_rect, &image_rect, &r))
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
2189 XCopyArea (s->display, s->img->pixmap, s->window, s->gc,
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
2190 r.x - x, r.y - y, r.width, r.height, r.x, r.y);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2191
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2192 /* 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
2193 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
2194 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
2195 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
2196 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
2197 nothing here for mouse-face. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2198 if (s->hl == DRAW_CURSOR)
45197
0b6da8b7d7ac (x_draw_image_foreground, x_draw_image_foreground_1):
Kim F. Storm <storm@cua.dk>
parents: 44974
diff changeset
2199 {
0b6da8b7d7ac (x_draw_image_foreground, x_draw_image_foreground_1):
Kim F. Storm <storm@cua.dk>
parents: 44974
diff changeset
2200 int r = s->img->relief;
0b6da8b7d7ac (x_draw_image_foreground, x_draw_image_foreground_1):
Kim F. Storm <storm@cua.dk>
parents: 44974
diff changeset
2201 if (r < 0) r = -r;
0b6da8b7d7ac (x_draw_image_foreground, x_draw_image_foreground_1):
Kim F. Storm <storm@cua.dk>
parents: 44974
diff changeset
2202 XDrawRectangle (s->display, s->window, s->gc, x - r, y - r,
0b6da8b7d7ac (x_draw_image_foreground, x_draw_image_foreground_1):
Kim F. Storm <storm@cua.dk>
parents: 44974
diff changeset
2203 s->img->width + r*2 - 1, s->img->height + r*2 - 1);
0b6da8b7d7ac (x_draw_image_foreground, x_draw_image_foreground_1):
Kim F. Storm <storm@cua.dk>
parents: 44974
diff changeset
2204 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2205 }
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 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2208 /* 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
2209 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
2210 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
2211 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2212
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 /* 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
2215
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2216 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2217 x_draw_image_relief (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2218 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2219 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2220 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
2221 XRectangle r;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2222 int x;
28785
796eafcfc070 (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 28686
diff changeset
2223 int y = s->ybase - image_ascent (s->img, s->face);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2224
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2225 /* 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
2226 right of that line. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2227 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
2228 && s->first_glyph->left_box_line_p)
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2229 x = s->x + abs (s->face->box_line_width);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2230 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2231 x = s->x;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2232
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2233 /* 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
2234 by that margin. */
35276
008aea836cbc (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 35272
diff changeset
2235 x += s->img->hmargin;
008aea836cbc (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 35272
diff changeset
2236 y += s->img->vmargin;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2237
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2238 if (s->hl == DRAW_IMAGE_SUNKEN
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2239 || s->hl == DRAW_IMAGE_RAISED)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2240 {
41791
fcab0e888c5c (x_draw_image_relief): Use predefined macro instead of constant when the
Pavel Janík <Pavel@Janik.cz>
parents: 41788
diff changeset
2241 thick = tool_bar_button_relief >= 0 ? tool_bar_button_relief : DEFAULT_TOOL_BAR_BUTTON_RELIEF;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2242 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
2243 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2244 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2245 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2246 thick = abs (s->img->relief);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2247 raised_p = s->img->relief > 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2248 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2249
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2250 x0 = x - thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2251 y0 = y - thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2252 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
2253 y1 = y + s->img->height + thick - 1;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2254
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2255 x_setup_relief_colors (s);
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
2256 get_glyph_string_clip_rect (s, &r);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2257 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
2258 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2259
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2260
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2261 /* 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
2262
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2263 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2264 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
2265 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2266 Pixmap pixmap;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2267 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2268 int x;
28785
796eafcfc070 (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 28686
diff changeset
2269 int y = s->ybase - s->y - image_ascent (s->img, s->face);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2270
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2271 /* 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
2272 right of that line. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2273 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
2274 && s->first_glyph->left_box_line_p)
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2275 x = abs (s->face->box_line_width);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2276 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2277 x = 0;
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 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
2280 by that margin. */
35276
008aea836cbc (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 35272
diff changeset
2281 x += s->img->hmargin;
008aea836cbc (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 35272
diff changeset
2282 y += s->img->vmargin;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2283
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2284 if (s->img->pixmap)
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 if (s->img->mask)
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 /* 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
2289 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
2290 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
2291 (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
2292 manually. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2293 unsigned long mask = (GCClipMask | GCClipXOrigin | GCClipYOrigin
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2294 | GCFunction);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2295 XGCValues xgcv;
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 xgcv.clip_mask = s->img->mask;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2298 xgcv.clip_x_origin = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2299 xgcv.clip_y_origin = y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2300 xgcv.function = GXcopy;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2301 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
2302
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2303 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
2304 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
2305 XSetClipMask (s->display, s->gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2306 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2307 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2308 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2309 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
2310 0, 0, s->img->width, s->img->height, x, y);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2311
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2312 /* 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
2313 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
2314 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
2315 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
2316 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
2317 nothing here for mouse-face. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2318 if (s->hl == DRAW_CURSOR)
45197
0b6da8b7d7ac (x_draw_image_foreground, x_draw_image_foreground_1):
Kim F. Storm <storm@cua.dk>
parents: 44974
diff changeset
2319 {
0b6da8b7d7ac (x_draw_image_foreground, x_draw_image_foreground_1):
Kim F. Storm <storm@cua.dk>
parents: 44974
diff changeset
2320 int r = s->img->relief;
0b6da8b7d7ac (x_draw_image_foreground, x_draw_image_foreground_1):
Kim F. Storm <storm@cua.dk>
parents: 44974
diff changeset
2321 if (r < 0) r = -r;
0b6da8b7d7ac (x_draw_image_foreground, x_draw_image_foreground_1):
Kim F. Storm <storm@cua.dk>
parents: 44974
diff changeset
2322 XDrawRectangle (s->display, s->window, s->gc, x - r, y - r,
0b6da8b7d7ac (x_draw_image_foreground, x_draw_image_foreground_1):
Kim F. Storm <storm@cua.dk>
parents: 44974
diff changeset
2323 s->img->width + r*2 - 1, s->img->height + r*2 - 1);
0b6da8b7d7ac (x_draw_image_foreground, x_draw_image_foreground_1):
Kim F. Storm <storm@cua.dk>
parents: 44974
diff changeset
2324 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2325 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2326 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2327 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2328 /* 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
2329 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
2330 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
2331 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2332
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 /* 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
2335 give the rectangle to draw. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2336
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2337 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2338 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
2339 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2340 int x, y, w, h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2341 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2342 if (s->stippled_p)
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 /* Fill background with a stipple pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2345 XSetFillStyle (s->display, s->gc, FillOpaqueStippled);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2346 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
2347 XSetFillStyle (s->display, s->gc, FillSolid);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2348 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2349 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2350 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
2351 }
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
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2354 /* Draw image glyph string S.
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2355
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2356 s->y
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2357 s->x +-------------------------
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2358 | s->face->box
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2359 |
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2360 | +-------------------------
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2361 | | s->img->margin
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2362 | |
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2363 | | +-------------------
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2364 | | | the image
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2365
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2366 */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2367
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2368 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2369 x_draw_image_glyph_string (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2370 struct glyph_string *s;
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 int x, y;
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2373 int box_line_hwidth = abs (s->face->box_line_width);
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2374 int box_line_vwidth = max (s->face->box_line_width, 0);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2375 int height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2376 Pixmap pixmap = None;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2377
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2378 height = s->height - 2 * box_line_vwidth;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2379
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2380
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2381 /* 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
2382 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
2383 flickering. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2384 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
2385 if (height > s->img->height
35276
008aea836cbc (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 35272
diff changeset
2386 || s->img->hmargin
008aea836cbc (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 35272
diff changeset
2387 || s->img->vmargin
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2388 || s->img->mask
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2389 || s->img->pixmap == 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2390 || s->width != s->background_width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2391 {
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2392 if (box_line_hwidth && s->first_glyph->left_box_line_p)
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2393 x = s->x + box_line_hwidth;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2394 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2395 x = s->x;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2396
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2397 y = s->y + box_line_vwidth;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2398
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2399 if (s->img->mask)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2400 {
31694
97c48afc4c5a (x_draw_image_glyph_string): Remove a comment describing
Gerd Moellmann <gerd@gnu.org>
parents: 31614
diff changeset
2401 /* Create a pixmap as large as the glyph string. Fill it
97c48afc4c5a (x_draw_image_glyph_string): Remove a comment describing
Gerd Moellmann <gerd@gnu.org>
parents: 31614
diff changeset
2402 with the background color. Copy the image to it, using
97c48afc4c5a (x_draw_image_glyph_string): Remove a comment describing
Gerd Moellmann <gerd@gnu.org>
parents: 31614
diff changeset
2403 its mask. Copy the temporary pixmap to the display. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2404 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
2405 int depth = DefaultDepthOfScreen (screen);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2406
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2407 /* 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
2408 pixmap = XCreatePixmap (s->display, s->window,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2409 s->background_width,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2410 s->height, depth);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2411
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2412 /* 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
2413 pixmap. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2414 XSetClipMask (s->display, s->gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2415
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2416 /* 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
2417 if (s->stippled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2418 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2419 /* Fill background with a stipple pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2420 XSetFillStyle (s->display, s->gc, FillOpaqueStippled);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2421 XFillRectangle (s->display, pixmap, s->gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2422 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
2423 XSetFillStyle (s->display, s->gc, FillSolid);
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 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2428 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
2429 &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2430 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
2431 XFillRectangle (s->display, pixmap, s->gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2432 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
2433 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
2434 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2435 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2436 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2437 x_draw_glyph_string_bg_rect (s, x, y, s->background_width, height);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2438
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2439 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2440 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2441
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2442 /* Draw the foreground. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2443 if (pixmap != None)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2444 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2445 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
2446 x_set_glyph_string_clipping (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2447 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
2448 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
2449 XFreePixmap (s->display, pixmap);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2450 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2451 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2452 x_draw_image_foreground (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2453
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2454 /* 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
2455 if (s->img->relief
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2456 || s->hl == DRAW_IMAGE_RAISED
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2457 || s->hl == DRAW_IMAGE_SUNKEN)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2458 x_draw_image_relief (s);
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2461
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2462 /* Draw stretch glyph string S. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2463
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2464 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2465 x_draw_stretch_glyph_string (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2466 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2467 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2468 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
2469 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
2470
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2471 if (s->hl == DRAW_CURSOR
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2472 && !x_stretch_cursor_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2473 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2474 /* 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
2475 as wide as the stretch glyph. */
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
2476 int width = min (FRAME_COLUMN_WIDTH (s->f), s->background_width);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2477
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2478 /* Draw cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2479 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
2480
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2481 /* 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
2482 if (width < s->background_width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2483 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2484 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
2485 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
2486 XRectangle r;
37922
fcd11c3e6341 (cursor_in_mouse_face_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37726
diff changeset
2487 GC gc;
fcd11c3e6341 (cursor_in_mouse_face_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37726
diff changeset
2488
fcd11c3e6341 (cursor_in_mouse_face_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37726
diff changeset
2489 if (s->row->mouse_face_p
fcd11c3e6341 (cursor_in_mouse_face_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37726
diff changeset
2490 && cursor_in_mouse_face_p (s->w))
fcd11c3e6341 (cursor_in_mouse_face_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37726
diff changeset
2491 {
fcd11c3e6341 (cursor_in_mouse_face_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37726
diff changeset
2492 x_set_mouse_face_gc (s);
fcd11c3e6341 (cursor_in_mouse_face_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37726
diff changeset
2493 gc = s->gc;
fcd11c3e6341 (cursor_in_mouse_face_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37726
diff changeset
2494 }
fcd11c3e6341 (cursor_in_mouse_face_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37726
diff changeset
2495 else
fcd11c3e6341 (cursor_in_mouse_face_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37726
diff changeset
2496 gc = s->face->gc;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2497
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
2498 get_glyph_string_clip_rect (s, &r);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2499 XSetClipRectangles (s->display, gc, 0, 0, &r, 1, Unsorted);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2500
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2501 if (s->face->stipple)
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 /* Fill background with a stipple pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2504 XSetFillStyle (s->display, gc, FillOpaqueStippled);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2505 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
2506 XSetFillStyle (s->display, gc, FillSolid);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2507 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2508 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2509 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2510 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2511 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
2512 XSetForeground (s->display, gc, xgcv.background);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2513 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
2514 XSetForeground (s->display, gc, xgcv.foreground);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2515 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2516 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2517 }
37535
6c6b5bd0f257 (x_draw_stretch_glyph_string): Don't draw background
Gerd Moellmann <gerd@gnu.org>
parents: 37525
diff changeset
2518 else if (!s->background_filled_p)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2519 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
2520 s->height);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2521
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2522 s->background_filled_p = 1;
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 /* Draw glyph string S. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2527
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2528 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2529 x_draw_glyph_string (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2530 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2531 {
36800
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
2532 int relief_drawn_p = 0;
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
2533
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2534 /* 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
2535 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
2536 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
2537 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
2538 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2539 xassert (s->next->img == NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2540 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
2541 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
2542 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
2543 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2544
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2545 /* 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
2546 x_set_glyph_string_gc (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2547
36800
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
2548 /* Draw relief (if any) in advance for char/composition so that the
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
2549 glyph string can be drawn over it. */
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
2550 if (!s->for_overlaps_p
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
2551 && s->face->box != FACE_NO_BOX
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
2552 && (s->first_glyph->type == CHAR_GLYPH
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
2553 || s->first_glyph->type == COMPOSITE_GLYPH))
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
2554
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
2555 {
39950
df00f7799bb7 (x_draw_glyph_string): Restore clipping after
Gerd Moellmann <gerd@gnu.org>
parents: 39922
diff changeset
2556 x_set_glyph_string_clipping (s);
36800
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
2557 x_draw_glyph_string_background (s, 1);
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
2558 x_draw_glyph_string_box (s);
39950
df00f7799bb7 (x_draw_glyph_string): Restore clipping after
Gerd Moellmann <gerd@gnu.org>
parents: 39922
diff changeset
2559 x_set_glyph_string_clipping (s);
36800
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
2560 relief_drawn_p = 1;
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
2561 }
39950
df00f7799bb7 (x_draw_glyph_string): Restore clipping after
Gerd Moellmann <gerd@gnu.org>
parents: 39922
diff changeset
2562 else
df00f7799bb7 (x_draw_glyph_string): Restore clipping after
Gerd Moellmann <gerd@gnu.org>
parents: 39922
diff changeset
2563 x_set_glyph_string_clipping (s);
36800
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
2564
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2565 switch (s->first_glyph->type)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2566 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2567 case IMAGE_GLYPH:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2568 x_draw_image_glyph_string (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2569 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2570
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2571 case STRETCH_GLYPH:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2572 x_draw_stretch_glyph_string (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2573 break;
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 case CHAR_GLYPH:
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2576 if (s->for_overlaps_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2577 s->background_filled_p = 1;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2578 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2579 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
2580 x_draw_glyph_string_foreground (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2581 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2582
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2583 case COMPOSITE_GLYPH:
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2584 if (s->for_overlaps_p || s->gidx > 0)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2585 s->background_filled_p = 1;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2586 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2587 x_draw_glyph_string_background (s, 1);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2588 x_draw_composite_glyph_string_foreground (s);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2589 break;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2590
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2591 default:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2592 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2593 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2594
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2595 if (!s->for_overlaps_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2596 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2597 /* Draw underline. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2598 if (s->face->underline_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2599 {
32945
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
2600 unsigned long tem, h;
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
2601 int y;
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
2602
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
2603 /* Get the underline thickness. Default is 1 pixel. */
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2604 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
2605 h = 1;
32945
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
2606
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
2607 /* Get the underline position. This is the recommended
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
2608 vertical offset in pixels from the baseline to the top of
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
2609 the underline. This is a signed value according to the
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
2610 specs, and its default is
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
2611
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
2612 ROUND ((maximum descent) / 2), with
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
2613 ROUND(x) = floor (x + 0.5) */
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2614
37153
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
2615 if (x_use_underline_position_properties
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
2616 && XGetFontProperty (s->font, XA_UNDERLINE_POSITION, &tem))
32945
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
2617 y = s->ybase + (long) tem;
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
2618 else if (s->face->font)
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
2619 y = s->ybase + (s->face->font->max_bounds.descent + 1) / 2;
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
2620 else
37031
5cb404651755 (expose_window_tree, expose_frame): Don't compute
Gerd Moellmann <gerd@gnu.org>
parents: 36948
diff changeset
2621 y = s->y + s->height - h;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2622
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2623 if (s->face->underline_defaulted_p)
32945
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
2624 XFillRectangle (s->display, s->window, s->gc,
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
2625 s->x, y, s->width, h);
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2626 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2627 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2628 XGCValues xgcv;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2629 XGetGCValues (s->display, s->gc, GCForeground, &xgcv);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2630 XSetForeground (s->display, s->gc, s->face->underline_color);
32945
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
2631 XFillRectangle (s->display, s->window, s->gc,
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
2632 s->x, y, s->width, h);
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2633 XSetForeground (s->display, s->gc, xgcv.foreground);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2634 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2635 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2636
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2637 /* Draw overline. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2638 if (s->face->overline_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2639 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2640 unsigned long dy = 0, h = 1;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2641
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2642 if (s->face->overline_color_defaulted_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2643 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
2644 s->width, h);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2645 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2646 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2647 XGCValues xgcv;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2648 XGetGCValues (s->display, s->gc, GCForeground, &xgcv);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2649 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
2650 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
2651 s->width, h);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2652 XSetForeground (s->display, s->gc, xgcv.foreground);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2653 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2654 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2655
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2656 /* Draw strike-through. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2657 if (s->face->strike_through_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2658 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2659 unsigned long h = 1;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2660 unsigned long dy = (s->height - h) / 2;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2661
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2662 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
2663 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
2664 s->width, h);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2665 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2666 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2667 XGCValues xgcv;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2668 XGetGCValues (s->display, s->gc, GCForeground, &xgcv);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2669 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
2670 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
2671 s->width, h);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2672 XSetForeground (s->display, s->gc, xgcv.foreground);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2673 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2674 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2675
36800
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
2676 /* Draw relief if not yet drawn. */
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
2677 if (!relief_drawn_p && s->face->box != FACE_NO_BOX)
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2678 x_draw_glyph_string_box (s);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2679 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2680
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2681 /* Reset clipping. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2682 XSetClipMask (s->display, s->gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2683 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2684
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
2685 /* Shift display to make room for inserted glyphs. */
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
2686
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
2687 void
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
2688 x_shift_glyphs_for_insert (f, x, y, width, height, shift_by)
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
2689 struct frame *f;
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
2690 int x, y, width, height, shift_by;
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
2691 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2692 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
2693 f->output_data.x->normal_gc,
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
2694 x, y, width, height,
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
2695 x + shift_by, y);
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
2696 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2697
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2698 /* 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
2699 for X frames. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2700
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2701 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2702 x_delete_glyphs (n)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2703 register int n;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2704 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2705 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2706 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2707
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2708
35581
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
2709 /* Like XClearArea, but check that WIDTH and HEIGHT are reasonable.
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
2710 If they are <= 0, this is probably an error. */
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
2711
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
2712 void
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
2713 x_clear_area (dpy, window, x, y, width, height, exposures)
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
2714 Display *dpy;
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
2715 Window window;
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
2716 int x, y;
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
2717 int width, height;
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
2718 int exposures;
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
2719 {
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
2720 xassert (width > 0 && height > 0);
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
2721 XClearArea (dpy, window, x, y, width, height, exposures);
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
2722 }
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
2723
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
2724
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2725 /* Clear entire frame. If updating_frame is non-null, clear that
25682
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
2726 frame. Otherwise clear the selected frame. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2727
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2728 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2729 x_clear_frame ()
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2730 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2731 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2732
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2733 if (updating_frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2734 f = updating_frame;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2735 else
25682
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
2736 f = SELECTED_FRAME ();
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
2737
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2738 /* 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
2739 longer visible. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2740 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
2741 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
2742 output_cursor.x = -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2743
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2744 /* 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
2745 follow an explicit cursor_to. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2746 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
2747 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
2748
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
2749 /* 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
2750 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
2751 x_scroll_bar_clear (f);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2752
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
2753 XFlush (FRAME_X_DISPLAY (f));
50130
66a7f2850b56 Clear frame didn't redraw scrollbars, fixed that.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50103
diff changeset
2754
66a7f2850b56 Clear frame didn't redraw scrollbars, fixed that.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50103
diff changeset
2755 #ifdef USE_GTK
66a7f2850b56 Clear frame didn't redraw scrollbars, fixed that.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50103
diff changeset
2756 xg_frame_cleared (f);
66a7f2850b56 Clear frame didn't redraw scrollbars, fixed that.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50103
diff changeset
2757 #endif
66a7f2850b56 Clear frame didn't redraw scrollbars, fixed that.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50103
diff changeset
2758
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2759 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2760 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2761
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2762
6791
7036e4fd549f (dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents: 6767
diff changeset
2763
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2764 /* 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
2765
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2766 /* 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
2767 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
2768
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2769 #if defined (HAVE_TIMEVAL) && defined (HAVE_SELECT)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2770
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2771
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2772 /* 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
2773 *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
2774
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2775 static int
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2776 timeval_subtract (result, x, y)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2777 struct timeval *result, x, y;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2778 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2779 /* 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
2780 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
2781 if (x.tv_usec < y.tv_usec)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2782 {
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2783 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
2784 y.tv_usec -= 1000000 * nsec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2785 y.tv_sec += nsec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2786 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2787
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2788 if (x.tv_usec - y.tv_usec > 1000000)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2789 {
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2790 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
2791 y.tv_usec += 1000000 * nsec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2792 y.tv_sec -= nsec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2793 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2794
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2795 /* 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
2796 positive. */
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2797 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
2798 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
2799
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2800 /* 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
2801 negative. */
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2802 return x.tv_sec < y.tv_sec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2803 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2804
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
2805 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
2806 XTflash (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
2807 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2808 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2809 BLOCK_INPUT;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2810
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2811 {
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2812 GC gc;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2813
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2814 /* 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
2815 pixels into background pixels. */
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2816 {
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2817 XGCValues values;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2818
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2819 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
2820 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
2821 ^ f->output_data.x->background_pixel);
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
2822
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
2823 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
2824 GCFunction | GCForeground, &values);
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2825 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2826
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2827 {
16352
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2828 /* Get the height not including a menu bar widget. */
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
2829 int height = FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, FRAME_LINES (f));
16352
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2830 /* 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
2831 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
2832 /* 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
2833 int flash_left = FRAME_INTERNAL_BORDER_WIDTH (f);
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
2834 int flash_right = FRAME_PIXEL_WIDTH (f) - FRAME_INTERNAL_BORDER_WIDTH (f);
16352
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2835
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2836 int width;
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2837
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2838 /* 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
2839 edge it is next to. */
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2840 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
2841 {
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2842 case vertical_scroll_bar_left:
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2843 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
2844 break;
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2845
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2846 case vertical_scroll_bar_right:
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2847 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
2848 break;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2849
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2850 default:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2851 break;
16352
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2852 }
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2853
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2854 width = flash_right - flash_left;
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2855
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2856 /* 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
2857 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
2858 {
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2859 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
2860 flash_left,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2861 (FRAME_INTERNAL_BORDER_WIDTH (f)
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
2862 + FRAME_TOOL_BAR_LINES (f) * FRAME_LINE_HEIGHT (f)),
16352
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2863 width, flash_height);
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2864 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
2865 flash_left,
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2866 (height - flash_height
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2867 - FRAME_INTERNAL_BORDER_WIDTH (f)),
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2868 width, flash_height);
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2869 }
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2870 else
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2871 /* If it is short, flash it all. */
16352
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2872 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
2873 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
2874 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
2875
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2876 x_flush (f);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2877
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2878 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2879 struct timeval wakeup;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2880
5362
d1fa597d923d (XTflush): FIx typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 5357
diff changeset
2881 EMACS_GET_TIME (wakeup);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2882
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2883 /* 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
2884 wakeup.tv_usec += 150000;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2885 wakeup.tv_sec += (wakeup.tv_usec / 1000000);
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2886 wakeup.tv_usec %= 1000000;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2887
36599
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
2888 /* Keep waiting until past the time wakeup or any input gets
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
2889 available. */
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
2890 while (! detect_input_pending ())
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2891 {
36599
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
2892 struct timeval current;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2893 struct timeval timeout;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2894
36599
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
2895 EMACS_GET_TIME (current);
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
2896
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
2897 /* Break if result would be negative. */
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
2898 if (timeval_subtract (&current, wakeup, current))
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2899 break;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2900
36599
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
2901 /* How long `select' should wait. */
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
2902 timeout.tv_sec = 0;
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
2903 timeout.tv_usec = 10000;
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
2904
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2905 /* 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
2906 select (0, NULL, NULL, NULL, &timeout);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2907 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2908 }
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
2909
16352
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2910 /* 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
2911 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
2912 {
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2913 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
2914 flash_left,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2915 (FRAME_INTERNAL_BORDER_WIDTH (f)
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
2916 + FRAME_TOOL_BAR_LINES (f) * FRAME_LINE_HEIGHT (f)),
16352
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2917 width, flash_height);
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2918 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
2919 flash_left,
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2920 (height - flash_height
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2921 - FRAME_INTERNAL_BORDER_WIDTH (f)),
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2922 width, flash_height);
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2923 }
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2924 else
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2925 /* If it is short, flash it all. */
16352
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2926 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
2927 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
2928 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
2929
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
2930 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
2931 x_flush (f);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2932 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2933 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2934
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2935 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2936 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2937
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2938 #endif /* defined (HAVE_TIMEVAL) && defined (HAVE_SELECT) */
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2939
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2940
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2941 /* Make audible bell. */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2942
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
2943 void
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2944 XTring_bell ()
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2945 {
25682
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
2946 struct frame *f = SELECTED_FRAME ();
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2947
25682
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
2948 if (FRAME_X_DISPLAY (f))
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
2949 {
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2950 #if defined (HAVE_TIMEVAL) && defined (HAVE_SELECT)
25682
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
2951 if (visible_bell)
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
2952 XTflash (f);
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
2953 else
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
2954 #endif
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
2955 {
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
2956 BLOCK_INPUT;
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
2957 XBell (FRAME_X_DISPLAY (f), 0);
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
2958 XFlush (FRAME_X_DISPLAY (f));
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
2959 UNBLOCK_INPUT;
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
2960 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2961 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2962 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2963
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2964
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2965 /* Specify how many text lines, from the top of the window,
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2966 should be affected by insert-lines and delete-lines operations.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2967 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
2968 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
2969
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
2970 static void
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2971 XTset_terminal_window (n)
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2972 register int n;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2973 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2974 /* This function intentionally left blank. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2975 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2976
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2977
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2978
24991
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 Line Dance
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2983 /* 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
2984 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
2985
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2986 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2987 x_ins_del_lines (vpos, n)
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
2988 int vpos, n;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2989 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2990 abort ();
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2994 /* 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
2995
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2996 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2997 x_scroll_run (w, run)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2998 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2999 struct run *run;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3000 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3001 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3002 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
3003
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3004 /* Get frame-relative bounding box of the text display area of W,
41134
04a7db64864b Fringe cleanup.
Kim F. Storm <storm@cua.dk>
parents: 41088
diff changeset
3005 without mode lines. Include in this box the left and right
04a7db64864b Fringe cleanup.
Kim F. Storm <storm@cua.dk>
parents: 41088
diff changeset
3006 fringe of W. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3007 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
3008
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3009 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
3010 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
3011 bottom_y = y + height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3012
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3013 if (to_y < from_y)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3014 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3015 /* 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
3016 line at the bottom. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3017 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
3018 height = bottom_y - from_y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3019 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3020 height = run->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3021 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3022 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3023 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3024 /* 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
3025 at the bottom. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3026 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
3027 height = bottom_y - to_y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3028 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3029 height = run->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3030 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3031
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3032 BLOCK_INPUT;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3033
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3034 /* 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
3035 updated_window = w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3036 x_clear_cursor (w);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3037
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3038 XCopyArea (FRAME_X_DISPLAY (f),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3039 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
3040 f->output_data.x->normal_gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3041 x, from_y,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3042 width, height,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3043 x, to_y);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3044
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3045 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3046 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3047
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3048
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3049
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3050 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3051 Exposure Events
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3052 ***********************************************************************/
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3053
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3054
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3055 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
3056 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
3057 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3058 {
3943
cbdf67dd68d0 * xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents: 3938
diff changeset
3059 /* 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
3060 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
3061 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
3062 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
3063 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
3064 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
3065 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
3066 UNBLOCK_INPUT;
12431
80a5aedfb4c7 (XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents: 12192
diff changeset
3067 x_update_cursor (f, 1);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3068 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3069
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3070 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
3071 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
3072 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3073 {
3943
cbdf67dd68d0 * xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents: 3938
diff changeset
3074 /* 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
3075 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
3076 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
3077 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
3078 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
3079 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
3080 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
3081 UNBLOCK_INPUT;
12431
80a5aedfb4c7 (XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents: 12192
diff changeset
3082 x_update_cursor (f, 1);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3083 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3084
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
3085 /* The focus has changed. Update the frames as necessary to reflect
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
3086 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
3087 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
3088 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
3089 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
3090
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
3091 static void
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3092 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
3093 struct x_display_info *dpyinfo;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
3094 struct frame *frame;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3095 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3096 struct frame *old_focus = dpyinfo->x_focus_frame;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3097
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3098 if (frame != dpyinfo->x_focus_frame)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3099 {
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
3100 /* Set this before calling other routines, so that they see
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
3101 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
3102 dpyinfo->x_focus_frame = frame;
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
3103
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
3104 if (old_focus && old_focus->auto_lower)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
3105 x_lower_frame (old_focus);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3106
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3107 #if 0
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
3108 selected_frame = frame;
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
3109 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
3110 selected_frame);
51048
7ac9c3bea5ea (Fselect_window): Add optional arg `norecord'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50521
diff changeset
3111 Fselect_window (selected_frame->selected_window, Qnil);
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
3112 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
3113 #endif /* ! 0 */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3114
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3115 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
3116 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
3117 else
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
3118 pending_autoraise_frame = 0;
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
3119 }
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
3120
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3121 x_frame_rehighlight (dpyinfo);
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
3122 }
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
3123
46076
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3124 /* Handle FocusIn and FocusOut state changes for FRAME.
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3125 If FRAME has focus and there exists more than one frame, puts
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3126 a FOCUS_IN_EVENT into BUFP.
46076
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3127 Returns number of events inserted into BUFP. */
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3128
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3129 static int
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3130 x_focus_changed (type, state, dpyinfo, frame, bufp, numchars)
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3131 int type;
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3132 int state;
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3133 struct x_display_info *dpyinfo;
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3134 struct frame *frame;
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3135 struct input_event *bufp;
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3136 int numchars;
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3137 {
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3138 int nr_events = 0;
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3139
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3140 if (type == FocusIn)
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3141 {
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3142 if (dpyinfo->x_focus_event_frame != frame)
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3143 {
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3144 x_new_focus_frame (dpyinfo, frame);
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3145 dpyinfo->x_focus_event_frame = frame;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3146
46076
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3147 /* Don't stop displaying the initial startup message
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3148 for a switch-frame event we don't need. */
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3149 if (numchars > 0
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3150 && GC_NILP (Vterminal_frame)
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3151 && GC_CONSP (Vframe_list)
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3152 && !GC_NILP (XCDR (Vframe_list)))
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3153 {
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3154 bufp->kind = FOCUS_IN_EVENT;
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3155 XSETFRAME (bufp->frame_or_window, frame);
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3156 bufp->arg = Qnil;
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3157 ++bufp;
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3158 numchars--;
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3159 ++nr_events;
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3160 }
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3161 }
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3162
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3163 frame->output_data.x->focus_state |= state;
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3164
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3165 #ifdef HAVE_X_I18N
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3166 if (FRAME_XIC (frame))
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3167 XSetICFocus (FRAME_XIC (frame));
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3168 #endif
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3169 }
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3170 else if (type == FocusOut)
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3171 {
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3172 frame->output_data.x->focus_state &= ~state;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3173
46076
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3174 if (dpyinfo->x_focus_event_frame == frame)
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3175 {
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3176 dpyinfo->x_focus_event_frame = 0;
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3177 x_new_focus_frame (dpyinfo, 0);
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3178 }
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3179
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3180 #ifdef HAVE_X_I18N
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3181 if (FRAME_XIC (frame))
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3182 XUnsetICFocus (FRAME_XIC (frame));
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3183 #endif
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3184 }
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3185
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3186 return nr_events;
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3187 }
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3188
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3189 /* The focus may have changed. Figure out if it is a real focus change,
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3190 by checking both FocusIn/Out and Enter/LeaveNotify events.
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3191
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3192 Returns number of events inserted into BUFP. */
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3193
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3194 static int
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3195 x_detect_focus_change (dpyinfo, event, bufp, numchars)
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3196 struct x_display_info *dpyinfo;
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3197 XEvent *event;
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3198 struct input_event *bufp;
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3199 int numchars;
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3200 {
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3201 struct frame *frame;
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3202 int nr_events = 0;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3203
50021
b5ec65424fcc * xterm.c (x_detect_focus_change): Call x_any_window_to_frame
Jan Djärv <jan.h.d@swipnet.se>
parents: 49859
diff changeset
3204 frame = x_any_window_to_frame (dpyinfo, event->xany.window);
46076
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3205 if (! frame) return nr_events;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3206
46076
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3207 switch (event->type)
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3208 {
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3209 case EnterNotify:
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3210 case LeaveNotify:
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3211 if (event->xcrossing.detail != NotifyInferior
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3212 && event->xcrossing.focus
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3213 && ! (frame->output_data.x->focus_state & FOCUS_EXPLICIT))
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3214 nr_events = x_focus_changed ((event->type == EnterNotify
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3215 ? FocusIn : FocusOut),
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3216 FOCUS_IMPLICIT,
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3217 dpyinfo,
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3218 frame,
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3219 bufp,
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3220 numchars);
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3221 break;
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3222
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3223 case FocusIn:
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3224 case FocusOut:
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3225 nr_events = x_focus_changed (event->type,
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3226 (event->xfocus.detail == NotifyPointer
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3227 ? FOCUS_IMPLICIT : FOCUS_EXPLICIT),
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3228 dpyinfo,
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3229 frame,
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3230 bufp,
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3231 numchars);
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3232 break;
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3233 }
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3234
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3235 return nr_events;
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3236 }
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3237
819af351608b (x_focus_changed): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3238
10223
97fc8c6b4a74 (XTupdate_begin): Discard records of prior mouse highlight
Richard M. Stallman <rms@gnu.org>
parents: 9823
diff changeset
3239 /* 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
3240
97fc8c6b4a74 (XTupdate_begin): Discard records of prior mouse highlight
Richard M. Stallman <rms@gnu.org>
parents: 9823
diff changeset
3241 void
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3242 x_mouse_leave (dpyinfo)
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3243 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
3244 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3245 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
3246 }
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
3247
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
3248 /* 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
3249 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
3250 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
3251
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3252 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
3253 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
3254 the appropriate X display info. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3255
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
3256 static void
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3257 XTframe_rehighlight (frame)
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3258 struct frame *frame;
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
3259 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3260 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
3261 }
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3262
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3263 static void
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3264 x_frame_rehighlight (dpyinfo)
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3265 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
3266 {
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3267 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
3268
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3269 if (dpyinfo->x_focus_frame)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3270 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3271 dpyinfo->x_highlight_frame
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3272 = ((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
3273 ? 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
3274 : dpyinfo->x_focus_frame);
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3275 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
3276 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3277 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
3278 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
3279 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3280 }
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
3281 else
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3282 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
3283
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3284 if (dpyinfo->x_highlight_frame != old_highlight)
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
3285 {
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
3286 if (old_highlight)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
3287 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
3288 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
3289 frame_highlight (dpyinfo->x_highlight_frame);
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
3290 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3291 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3292
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3293
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3294
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3295 /* Keyboard processing - modifier keys, vendor-specific keysyms, etc. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3296
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3297 /* 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
3298 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
3299 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
3300 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
3301 {
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
3302 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
3303 KeySym *syms;
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3304 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
3305 XModifierKeymap *mods;
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3306
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
3307 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
3308 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
3309 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
3310 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
3311 dpyinfo->hyper_mod_mask = 0;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
3312
2127
adaf588e32a6 * xterm.c (x_find_modifier_meanings): XDisplayKeycodes only
Jim Blandy <jimb@redhat.com>
parents: 2064
diff changeset
3313 #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
3314 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
3315 #else
13884
26245345f6f1 (x_find_modifier_meanings): Fix !X11R4 code to use dpyinfo.
Richard M. Stallman <rms@gnu.org>
parents: 13782
diff changeset
3316 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
3317 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
3318 #endif
adaf588e32a6 * xterm.c (x_find_modifier_meanings): XDisplayKeycodes only
Jim Blandy <jimb@redhat.com>
parents: 2064
diff changeset
3319
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
3320 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
3321 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
3322 &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
3323 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
3324
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
3325 /* 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
3326 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
3327 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3328 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
3329
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3330 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
3331 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
3332 {
10287
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
3333 KeyCode code
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
3334 = 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
3335
6560
a071babfa9ea (x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents: 6521
diff changeset
3336 /* Zeroes are used for filler. Skip them. */
a071babfa9ea (x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents: 6521
diff changeset
3337 if (code == 0)
a071babfa9ea (x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents: 6521
diff changeset
3338 continue;
a071babfa9ea (x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents: 6521
diff changeset
3339
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3340 /* 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
3341 {
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3342 int code_col;
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3343
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3344 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
3345 {
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
3346 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
3347
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
3348 switch (sym)
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3349 {
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
3350 case XK_Meta_L:
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
3351 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
3352 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
3353 break;
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
3354
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
3355 case XK_Alt_L:
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
3356 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
3357 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
3358 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
3359
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
3360 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
3361 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
3362 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
3363 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
3364
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
3365 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
3366 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
3367 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
3368 break;
1436
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
3369
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
3370 case XK_Shift_Lock:
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
3371 /* 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
3372 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
3373 dpyinfo->shift_lock_mask = LockMask;
1436
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
3374 break;
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3375 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3376 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3377 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3378 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3379 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3380
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
3381 /* 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
3382 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
3383 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
3384 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
3385 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
3386 }
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
3387
2923
c8997402dd6b (x_find_modifier_meanings): If some keys are meta and alt,
Richard M. Stallman <rms@gnu.org>
parents: 2882
diff changeset
3388 /* 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
3389 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
3390 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
3391 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
3392 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
3393 }
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
3394
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3395 XFree ((char *) syms);
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
3396 XFreeModifiermap (mods);
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3397 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3398
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
3399 /* 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
3400 Emacs uses. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3401
1530
a7f8a1fe258e * xterm.c (x_convert_modifiers): Declare this to return an
Jim Blandy <jimb@redhat.com>
parents: 1436
diff changeset
3402 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
3403 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
3404 struct x_display_info *dpyinfo;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3405 unsigned int state;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3406 {
43302
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3407 EMACS_UINT mod_meta = meta_modifier;
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3408 EMACS_UINT mod_alt = alt_modifier;
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3409 EMACS_UINT mod_hyper = hyper_modifier;
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3410 EMACS_UINT mod_super = super_modifier;
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3411 Lisp_Object tem;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3412
43302
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3413 tem = Fget (Vx_alt_keysym, Qmodifier_value);
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3414 if (! EQ (tem, Qnil)) mod_alt = XUINT (tem);
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3415 tem = Fget (Vx_meta_keysym, Qmodifier_value);
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3416 if (! EQ (tem, Qnil)) mod_meta = XUINT (tem);
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3417 tem = Fget (Vx_hyper_keysym, Qmodifier_value);
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3418 if (! EQ (tem, Qnil)) mod_hyper = XUINT (tem);
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3419 tem = Fget (Vx_super_keysym, Qmodifier_value);
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3420 if (! EQ (tem, Qnil)) mod_super = XUINT (tem);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3421
43302
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3422
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
3423 return ( ((state & (ShiftMask | dpyinfo->shift_lock_mask)) ? shift_modifier : 0)
43302
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3424 | ((state & ControlMask) ? ctrl_modifier : 0)
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3425 | ((state & dpyinfo->meta_mod_mask) ? mod_meta : 0)
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3426 | ((state & dpyinfo->alt_mod_mask) ? mod_alt : 0)
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3427 | ((state & dpyinfo->super_mod_mask) ? mod_super : 0)
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3428 | ((state & dpyinfo->hyper_mod_mask) ? mod_hyper : 0));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3429 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3430
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
3431 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
3432 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
3433 struct x_display_info *dpyinfo;
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
3434 unsigned int state;
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
3435 {
43302
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3436 EMACS_UINT mod_meta = meta_modifier;
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3437 EMACS_UINT mod_alt = alt_modifier;
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3438 EMACS_UINT mod_hyper = hyper_modifier;
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3439 EMACS_UINT mod_super = super_modifier;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3440
43302
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3441 Lisp_Object tem;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3442
43302
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3443 tem = Fget (Vx_alt_keysym, Qmodifier_value);
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3444 if (! EQ (tem, Qnil)) mod_alt = XUINT (tem);
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3445 tem = Fget (Vx_meta_keysym, Qmodifier_value);
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3446 if (! EQ (tem, Qnil)) mod_meta = XUINT (tem);
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3447 tem = Fget (Vx_hyper_keysym, Qmodifier_value);
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3448 if (! EQ (tem, Qnil)) mod_hyper = XUINT (tem);
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3449 tem = Fget (Vx_super_keysym, Qmodifier_value);
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3450 if (! EQ (tem, Qnil)) mod_super = XUINT (tem);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3451
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3452
43302
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3453 return ( ((state & mod_alt) ? dpyinfo->alt_mod_mask : 0)
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3454 | ((state & mod_super) ? dpyinfo->super_mod_mask : 0)
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3455 | ((state & mod_hyper) ? dpyinfo->hyper_mod_mask : 0)
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3456 | ((state & shift_modifier) ? ShiftMask : 0)
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3457 | ((state & ctrl_modifier) ? ControlMask : 0)
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3458 | ((state & mod_meta) ? dpyinfo->meta_mod_mask : 0));
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
3459 }
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3460
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3461 /* Convert a keysym to its name. */
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3462
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3463 char *
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3464 x_get_keysym_name (keysym)
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3465 KeySym keysym;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3466 {
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3467 char *value;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3468
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3469 BLOCK_INPUT;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3470 value = XKeysymToString (keysym);
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3471 UNBLOCK_INPUT;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3472
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3473 return value;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3474 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3475
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3476
3585
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
3477
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
3478 /* Mouse clicks and mouse movement. Rah. */
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
3479
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3480 /* Prepare a mouse-event in *RESULT for placement in the input queue.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3481
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3482 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
3483 the mouse. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3484
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3485 static Lisp_Object
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
3486 construct_mouse_click (result, event, f)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3487 struct input_event *result;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3488 XButtonEvent *event;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
3489 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3490 {
45803
9484de301252 Rename enum event_kind items.
Pavel Janík <Pavel@Janik.cz>
parents: 45563
diff changeset
3491 /* 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
3492 otherwise. */
45803
9484de301252 Rename enum event_kind items.
Pavel Janík <Pavel@Janik.cz>
parents: 45563
diff changeset
3493 result->kind = MOUSE_CLICK_EVENT;
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3494 result->code = event->button - Button1;
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 642
diff changeset
3495 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
3496 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
3497 event->state)
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
3498 | (event->type == ButtonRelease
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
3499 ? up_modifier
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
3500 : down_modifier));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3501
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3502 XSETINT (result->x, event->x);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3503 XSETINT (result->y, event->y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3504 XSETFRAME (result->frame_or_window, f);
30197
3237a5529020 (construct_mouse_click, x_scroll_bar_to_input_event)
Gerd Moellmann <gerd@gnu.org>
parents: 30182
diff changeset
3505 result->arg = Qnil;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3506 return Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3507 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3508
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3509
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3510 /* Function to report a mouse movement to the mainstream Emacs code.
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3511 The input handler calls this.
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3512
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3513 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
3514 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
3515 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
3516 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
3517
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3518 static XMotionEvent last_mouse_motion_event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3519 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
3520
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3521 static void
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3522 note_mouse_movement (frame, event)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
3523 FRAME_PTR frame;
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3524 XMotionEvent *event;
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3525 {
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3526 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
3527 last_mouse_motion_event = *event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3528 XSETFRAME (last_mouse_motion_frame, frame);
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3529
7680
8212755ff793 (note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 7651
diff changeset
3530 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
3531 {
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
3532 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
3533 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
3534 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
3535 }
8212755ff793 (note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 7651
diff changeset
3536
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3537 /* 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
3538 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
3539 || 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
3540 || 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
3541 || 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
3542 {
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
3543 frame->mouse_moved = 1;
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3544 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
3545 note_mouse_highlight (frame, event->x, event->y);
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3546 }
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3547 }
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3548
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3549
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 Mouse Face
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3552 ************************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3553
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3554 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3555 redo_mouse_highlight ()
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 if (!NILP (last_mouse_motion_frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3558 && 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
3559 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
3560 last_mouse_motion_event.x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3561 last_mouse_motion_event.y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3562 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3563
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3564
36492
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3565 static int glyph_rect P_ ((struct frame *f, int, int, XRectangle *));
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3566
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3567
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3568 /* Try to determine frame pixel position and size of the glyph under
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3569 frame pixel coordinates X/Y on frame F . Return the position and
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3570 size in *RECT. Value is non-zero if we could compute these
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3571 values. */
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3572
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3573 static int
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3574 glyph_rect (f, x, y, rect)
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3575 struct frame *f;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3576 int x, y;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3577 XRectangle *rect;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3578 {
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3579 Lisp_Object window;
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
3580 int found = 0;
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
3581
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
3582 window = window_from_coordinates (f, x, y, 0, &x, &y, 0);
36492
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3583 if (!NILP (window))
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3584 {
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3585 struct window *w = XWINDOW (window);
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3586 struct glyph_row *r = MATRIX_FIRST_TEXT_ROW (w->current_matrix);
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3587 struct glyph_row *end = r + w->current_matrix->nrows - 1;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3588
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3589 for (; !found && r < end && r->enabled_p; ++r)
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3590 if (r->y >= y)
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3591 {
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3592 struct glyph *g = r->glyphs[TEXT_AREA];
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3593 struct glyph *end = g + r->used[TEXT_AREA];
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3594 int gx;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3595
36492
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3596 for (gx = r->x; !found && g < end; gx += g->pixel_width, ++g)
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3597 if (gx >= x)
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3598 {
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3599 rect->width = g->pixel_width;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3600 rect->height = r->height;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3601 rect->x = WINDOW_TO_FRAME_PIXEL_X (w, gx);
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3602 rect->y = WINDOW_TO_FRAME_PIXEL_Y (w, r->y);
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3603 found = 1;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3604 }
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3605 }
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3606 }
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3607
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3608 return found;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3609 }
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3610
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3611
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3612 /* Return the current position of the mouse.
36492
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3613 *FP should be a frame which indicates which display to ask about.
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3614
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3615 If the mouse movement started in a scroll bar, set *FP, *BAR_WINDOW,
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3616 and *PART to the frame, window, and scroll bar part that the mouse
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3617 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
3618 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
3619
36492
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3620 If the mouse movement started elsewhere, set *FP to the frame the
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3621 mouse is on, *BAR_WINDOW to nil, and *X and *Y to the character cell
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3622 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
3623
36492
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3624 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
3625 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
3626
3669
fd4187a96445 (XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents: 3639
diff changeset
3627 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
3628
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3629 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
3630 movement. */
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3631
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3632 static void
11122
ce63fb361ae9 (XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents: 11015
diff changeset
3633 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
3634 FRAME_PTR *fp;
11122
ce63fb361ae9 (XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents: 11015
diff changeset
3635 int insist;
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3636 Lisp_Object *bar_window;
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3637 enum scroll_bar_part *part;
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3638 Lisp_Object *x, *y;
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3639 unsigned long *time;
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3640 {
3669
fd4187a96445 (XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents: 3639
diff changeset
3641 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
3642
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3643 BLOCK_INPUT;
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3644
20180
bfbf6a2939a3 (XTmouse_position): Handle INSIST < 0.
Karl Heuer <kwzh@gnu.org>
parents: 19447
diff changeset
3645 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
3646 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
3647 else
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3648 {
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3649 Window root;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3650 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
3651
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3652 Window dummy_window;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3653 int dummy;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3654
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
3655 Lisp_Object frame, tail;
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
3656
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
3657 /* 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
3658 FOR_EACH_FRAME (tail, frame)
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
3659 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
3660 XFRAME (frame)->mouse_moved = 0;
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
3661
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3662 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
3663
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3664 /* 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
3665 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
3666 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
3667
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3668 /* 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
3669 &root,
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3670
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3671 /* 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
3672 a different screen. */
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3673 &dummy_window,
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3674
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3675 /* The position on that root window. */
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
3676 &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
3677
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3678 /* 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
3679 &dummy, &dummy,
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3680
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3681 /* 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
3682 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
3683 (unsigned int *) &dummy);
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3684
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3685 /* 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
3686 containing the pointer. */
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3687 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3688 Window win, child;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3689 int win_x, win_y;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3690 int parent_x = 0, parent_y = 0;
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
3691 int count;
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3692
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3693 win = root;
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3694
11436
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
3695 /* 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
3696 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
3697 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
3698
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
3699 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
3700
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
3701 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
3702 && 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
3703 {
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3704 /* 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
3705 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
3706 XTranslateCoordinates (FRAME_X_DISPLAY (*fp),
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3707
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3708 /* From-window, to-window. */
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3709 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
3710
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3711 /* 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
3712 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
3713
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3714 /* Child of win. */
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3715 &child);
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3716 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
3717 }
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3718 else
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3719 {
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3720 while (1)
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3721 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
3722 XTranslateCoordinates (FRAME_X_DISPLAY (*fp),
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3723
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3724 /* From-window, to-window. */
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3725 root, win,
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3726
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3727 /* From-position, to-position. */
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3728 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
3729
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3730 /* Child of win. */
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3731 &child);
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3732
13627
8873aa3451dd (XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents: 13598
diff changeset
3733 if (child == None || child == win)
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3734 break;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3735
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3736 win = child;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3737 parent_x = win_x;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3738 parent_y = win_y;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3739 }
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3740
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3741 /* Now we know that:
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3742 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
3743 (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
3744 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
3745 (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
3746 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
3747 (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
3748 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
3749 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
3750 never use them in that case.) */
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3751
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3752 /* 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
3753 f1 = x_any_window_to_frame (FRAME_X_DISPLAY_INFO (*fp), win);
34008
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
3754
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
3755 #ifdef USE_X_TOOLKIT
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
3756 /* If we end up with the menu bar window, say it's not
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
3757 on the frame. */
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
3758 if (f1 != NULL
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
3759 && f1->output_data.x->menubar_widget
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
3760 && win == XtWindow (f1->output_data.x->menubar_widget))
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
3761 f1 = NULL;
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
3762 #endif /* USE_X_TOOLKIT */
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3763 }
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
3764
11436
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
3765 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
3766 f1 = 0;
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
3767
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
3768 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
3769
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3770 /* 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
3771 if (! f1)
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3772 {
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3773 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
3774
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3775 if (bar)
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3776 {
3669
fd4187a96445 (XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents: 3639
diff changeset
3777 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
3778 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
3779 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
3780 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3781 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3782
20180
bfbf6a2939a3 (XTmouse_position): Handle INSIST < 0.
Karl Heuer <kwzh@gnu.org>
parents: 19447
diff changeset
3783 if (f1 == 0 && insist > 0)
25682
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
3784 f1 = SELECTED_FRAME ();
11122
ce63fb361ae9 (XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents: 11015
diff changeset
3785
3669
fd4187a96445 (XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents: 3639
diff changeset
3786 if (f1)
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3787 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3788 /* 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
3789 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
3790 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
3791 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
3792 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
3793 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
3794 the frame are divided into. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3795
36492
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3796 int width, height, gx, gy;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3797 XRectangle rect;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3798
36492
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3799 if (glyph_rect (f1, win_x, win_y, &rect))
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3800 last_mouse_glyph = rect;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3801 else
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3802 {
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3803 width = FRAME_SMALLEST_CHAR_WIDTH (f1);
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3804 height = FRAME_SMALLEST_FONT_HEIGHT (f1);
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3805 gx = win_x;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3806 gy = win_y;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3807
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
3808 /* Arrange for the division in FRAME_PIXEL_X_TO_COL etc. to
36492
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3809 round down even for negative values. */
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3810 if (gx < 0)
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3811 gx -= width - 1;
36555
b6b9363f3e20 (XTmouse_position): Fix tyypo.
Dave Love <fx@gnu.org>
parents: 36492
diff changeset
3812 if (gy < 0)
36492
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3813 gy -= height - 1;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3814 gx = (gx + width - 1) / width * width;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3815 gy = (gy + height - 1) / height * height;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3816
36492
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3817 last_mouse_glyph.width = width;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3818 last_mouse_glyph.height = height;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3819 last_mouse_glyph.x = gx;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3820 last_mouse_glyph.y = gy;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3821 }
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3822
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3823 *bar_window = Qnil;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3824 *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
3825 *fp = f1;
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
3826 XSETINT (*x, win_x);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
3827 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
3828 *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
3829 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3830 }
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3831 }
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3832
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3833 UNBLOCK_INPUT;
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3834 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3835
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3836
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3837
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
3838 /***********************************************************************
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
3839 Scroll bars
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
3840 ***********************************************************************/
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
3841
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3842 /* Scroll bar support. */
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3843
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3844 /* 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
3845 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
3846 bits. */
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
3847
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3848 static struct scroll_bar *
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3849 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
3850 Window window_id;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
3851 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3852 Lisp_Object tail;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
3853
50064
40170697bff1 Implement Ctrl-Mouse-2 (split vertically) for toolkit scrollbars
Jan Djärv <jan.h.d@swipnet.se>
parents: 50056
diff changeset
3854 #ifdef USE_GTK
40170697bff1 Implement Ctrl-Mouse-2 (split vertically) for toolkit scrollbars
Jan Djärv <jan.h.d@swipnet.se>
parents: 50056
diff changeset
3855 window_id = (Window) xg_get_scroll_id_for_window (window_id);
40170697bff1 Implement Ctrl-Mouse-2 (split vertically) for toolkit scrollbars
Jan Djärv <jan.h.d@swipnet.se>
parents: 50056
diff changeset
3856 #endif /* USE_GTK */
40170697bff1 Implement Ctrl-Mouse-2 (split vertically) for toolkit scrollbars
Jan Djärv <jan.h.d@swipnet.se>
parents: 50056
diff changeset
3857
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3858 for (tail = Vframe_list;
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3859 XGCTYPE (tail) == Lisp_Cons;
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
3860 tail = XCDR (tail))
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
3861 {
6521
a975c5944916 (x_window_to_scroll_bar, x_new_font): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6413
diff changeset
3862 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
3863
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
3864 frame = XCAR (tail);
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
3865 /* 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
3866 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
3867 abort ();
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
3868
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3869 /* 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
3870 right window ID. */
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3871 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
3872 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
3873 /* 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
3874 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
3875 ! GC_NILP (bar) || (bar = condemned,
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3876 condemned = Qnil,
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3877 ! 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
3878 bar = XSCROLL_BAR (bar)->next)
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3879 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
3880 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
3881 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
3882
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
3883 return 0;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
3884 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
3885
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3886
39671
45d46b88cdd1 USE_LUCID can be defined iff USE_X_TOOLKIT is defined.
Pavel Janík <Pavel@Janik.cz>
parents: 39618
diff changeset
3887 #if defined USE_LUCID
37525
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3888
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3889 /* Return the Lucid menu bar WINDOW is part of. Return null
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3890 if WINDOW is not part of a menu bar. */
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3891
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3892 static Widget
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3893 x_window_to_menu_bar (window)
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3894 Window window;
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3895 {
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3896 Lisp_Object tail;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3897
37525
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3898 for (tail = Vframe_list;
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3899 XGCTYPE (tail) == Lisp_Cons;
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3900 tail = XCDR (tail))
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3901 {
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3902 Lisp_Object frame = XCAR (tail);
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3903 Widget menu_bar = XFRAME (frame)->output_data.x->menubar_widget;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3904
37525
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3905 if (menu_bar && xlwmenu_window_p (menu_bar, window))
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3906 return menu_bar;
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3907 }
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3908
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3909 return NULL;
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3910 }
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3911
39671
45d46b88cdd1 USE_LUCID can be defined iff USE_X_TOOLKIT is defined.
Pavel Janík <Pavel@Janik.cz>
parents: 39618
diff changeset
3912 #endif /* USE_LUCID */
37525
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3913
24991
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 Toolkit scroll bars
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3917 ************************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3918
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
3919 #ifdef USE_TOOLKIT_SCROLL_BARS
24991
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 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
3922 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
3923 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
3924 struct scroll_bar *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3925 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
3926 int, int, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3927
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3928
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3929 /* 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
3930 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
3931
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3932 static Lisp_Object window_being_scrolled;
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 /* 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
3935
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3936 static int last_scroll_bar_part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3937
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
3938 /* Whether this is an Xaw with arrow-scrollbars. This should imply
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
3939 that movements of 1/20 of the screen size are mapped to up/down. */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
3940
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3941 #ifndef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3942 /* Id of action hook installed for scroll bars. */
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3943
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3944 static XtActionHookId action_hook_id;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3945
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
3946 static Boolean xaw3d_arrow_scroll;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
3947
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
3948 /* Whether the drag scrolling maintains the mouse at the top of the
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
3949 thumb. If not, resizing the thumb needs to be done more carefully
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
3950 to avoid jerkyness. */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
3951
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
3952 static Boolean xaw3d_pick_top;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
3953
50324
d9a401f2769d (take_vertical_position_into_account): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50270
diff changeset
3954 extern void set_vertical_scroll_bar P_ ((struct window *));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3955
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3956 /* Action hook installed via XtAppAddActionHook when toolkit scroll
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
3957 bars are used.. The hook is responsible for detecting when
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3958 the user ends an interaction with the scroll bar, and generates
45803
9484de301252 Rename enum event_kind items.
Pavel Janík <Pavel@Janik.cz>
parents: 45563
diff changeset
3959 a `end-scroll' SCROLL_BAR_CLICK_EVENT' event if so. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3960
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3961 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3962 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
3963 num_params)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3964 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3965 XtPointer client_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3966 String action_name;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3967 XEvent *event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3968 String *params;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3969 Cardinal *num_params;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3970 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3971 int scroll_bar_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3972 char *end_action;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3973
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3974 #ifdef USE_MOTIF
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3975 scroll_bar_p = XmIsScrollBar (widget);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3976 end_action = "Release";
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
3977 #else /* !USE_MOTIF i.e. use Xaw */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3978 scroll_bar_p = XtIsSubclass (widget, scrollbarWidgetClass);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3979 end_action = "EndScroll";
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
3980 #endif /* USE_MOTIF */
24991
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 if (scroll_bar_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3983 && strcmp (action_name, end_action) == 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3984 && WINDOWP (window_being_scrolled))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3985 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3986 struct window *w;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3987
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3988 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
3989 scroll_bar_end_scroll, 0, 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3990 w = XWINDOW (window_being_scrolled);
51897
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
3991
50324
d9a401f2769d (take_vertical_position_into_account): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50270
diff changeset
3992 if (!NILP (XSCROLL_BAR (w->vertical_scroll_bar)->dragging))
50327
f139cd7e1d62 (xt_action_hook): Unset dragging so the reset does take place.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50326
diff changeset
3993 {
f139cd7e1d62 (xt_action_hook): Unset dragging so the reset does take place.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50326
diff changeset
3994 XSCROLL_BAR (w->vertical_scroll_bar)->dragging = Qnil;
f139cd7e1d62 (xt_action_hook): Unset dragging so the reset does take place.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50326
diff changeset
3995 /* The thumb size is incorrect while dragging: fix it. */
f139cd7e1d62 (xt_action_hook): Unset dragging so the reset does take place.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50326
diff changeset
3996 set_vertical_scroll_bar (w);
f139cd7e1d62 (xt_action_hook): Unset dragging so the reset does take place.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50326
diff changeset
3997 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3998 window_being_scrolled = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3999 last_scroll_bar_part = -1;
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
4000
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
4001 /* Xt timeouts no longer needed. */
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
4002 toolkit_scroll_bar_interaction = 0;
24991
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 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4005 #endif /* not USE_GTK */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4006
33643
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4007 /* A vector of windows used for communication between
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4008 x_send_scroll_bar_event and x_scroll_bar_to_input_event. */
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4009
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4010 static struct window **scroll_bar_windows;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4011 static int scroll_bar_windows_size;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4012
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4013
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4014 /* 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
4015 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
4016 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
4017 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
4018
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4019 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4020 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
4021 Lisp_Object window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4022 int part, portion, whole;
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 XEvent event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4025 XClientMessageEvent *ev = (XClientMessageEvent *) &event;
33643
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4026 struct window *w = XWINDOW (window);
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4027 struct frame *f = XFRAME (w->frame);
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4028 int i;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4029
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4030 BLOCK_INPUT;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4031
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4032 /* 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
4033 ev->type = ClientMessage;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4034 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
4035 ev->display = FRAME_X_DISPLAY (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4036 ev->window = FRAME_X_WINDOW (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4037 ev->format = 32;
33643
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4038
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4039 /* We can only transfer 32 bits in the XClientMessageEvent, which is
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4040 not enough to store a pointer or Lisp_Object on a 64 bit system.
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4041 So, store the window in scroll_bar_windows and pass the index
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4042 into that array in the event. */
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4043 for (i = 0; i < scroll_bar_windows_size; ++i)
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4044 if (scroll_bar_windows[i] == NULL)
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4045 break;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4046
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4047 if (i == scroll_bar_windows_size)
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4048 {
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4049 int new_size = max (10, 2 * scroll_bar_windows_size);
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4050 size_t nbytes = new_size * sizeof *scroll_bar_windows;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4051 size_t old_nbytes = scroll_bar_windows_size * sizeof *scroll_bar_windows;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4052
33643
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4053 scroll_bar_windows = (struct window **) xrealloc (scroll_bar_windows,
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4054 nbytes);
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4055 bzero (&scroll_bar_windows[i], nbytes - old_nbytes);
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4056 scroll_bar_windows_size = new_size;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4057 }
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4058
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4059 scroll_bar_windows[i] = w;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4060 ev->data.l[0] = (long) i;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4061 ev->data.l[1] = (long) part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4062 ev->data.l[2] = (long) 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4063 ev->data.l[3] = (long) portion;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4064 ev->data.l[4] = (long) whole;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4065
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
4066 /* Make Xt timeouts work while the scroll bar is active. */
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
4067 toolkit_scroll_bar_interaction = 1;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
4068
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4069 /* 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
4070 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
4071 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
4072 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
4073 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4074 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4075
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4076
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4077 /* 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
4078 in *IEVENT. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4079
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4080 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4081 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
4082 XEvent *event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4083 struct input_event *ievent;
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 XClientMessageEvent *ev = (XClientMessageEvent *) event;
29717
acaa36b47f50 fix up more Lisp_Object/int conversion issues
Ken Raeburn <raeburn@raeburn.org>
parents: 29619
diff changeset
4086 Lisp_Object window;
acaa36b47f50 fix up more Lisp_Object/int conversion issues
Ken Raeburn <raeburn@raeburn.org>
parents: 29619
diff changeset
4087 struct frame *f;
33643
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4088 struct window *w;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4089
33643
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4090 w = scroll_bar_windows[ev->data.l[0]];
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4091 scroll_bar_windows[ev->data.l[0]] = NULL;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4092
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4093 XSETWINDOW (window, w);
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4094 f = XFRAME (w->frame);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4095
45803
9484de301252 Rename enum event_kind items.
Pavel Janík <Pavel@Janik.cz>
parents: 45563
diff changeset
4096 ievent->kind = SCROLL_BAR_CLICK_EVENT;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4097 ievent->frame_or_window = window;
30197
3237a5529020 (construct_mouse_click, x_scroll_bar_to_input_event)
Gerd Moellmann <gerd@gnu.org>
parents: 30182
diff changeset
4098 ievent->arg = Qnil;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4099 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4100 ievent->timestamp = CurrentTime;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4101 #else
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4102 ievent->timestamp = XtLastTimestampProcessed (FRAME_X_DISPLAY (f));
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4103 #endif
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4104 ievent->part = ev->data.l[1];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4105 ievent->code = ev->data.l[2];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4106 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
4107 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
4108 ievent->modifiers = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4109 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4110
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4111
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4112 #ifdef USE_MOTIF
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 /* 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
4115
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4116 #define XM_SB_MAX 10000000
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4117
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4118
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4119 /* 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
4120 bar widget. CLIENT_DATA is a pointer to the scroll_bar structure.
46159
bd315b9fa3f0 Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 46141
diff changeset
4121 CALL_DATA is a pointer to a XmScrollBarCallbackStruct. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4122
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4123 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4124 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
4125 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4126 XtPointer client_data, call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4127 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4128 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
4129 XmScrollBarCallbackStruct *cs = (XmScrollBarCallbackStruct *) call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4130 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
4131
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4132 switch (cs->reason)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4133 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4134 case XmCR_DECREMENT:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4135 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4136 part = scroll_bar_up_arrow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4137 break;
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 case XmCR_INCREMENT:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4140 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4141 part = scroll_bar_down_arrow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4142 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4143
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4144 case XmCR_PAGE_DECREMENT:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4145 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4146 part = scroll_bar_above_handle;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4147 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4148
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4149 case XmCR_PAGE_INCREMENT:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4150 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4151 part = scroll_bar_below_handle;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4152 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4153
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4154 case XmCR_TO_TOP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4155 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4156 part = scroll_bar_to_top;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4157 break;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4158
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4159 case XmCR_TO_BOTTOM:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4160 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4161 part = scroll_bar_to_bottom;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4162 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4163
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4164 case XmCR_DRAG:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4165 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4166 int slider_size;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4167
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4168 /* Get the slider size. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4169 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4170 XtVaGetValues (widget, XmNsliderSize, &slider_size, NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4171 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4172
50326
d63b3eeca844 (xm_scroll_callback): Undo a tiny bit of the previous change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50324
diff changeset
4173 whole = XM_SB_MAX - slider_size;
50324
d9a401f2769d (take_vertical_position_into_account): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50270
diff changeset
4174 portion = min (cs->value, whole);
43884
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4175 part = scroll_bar_handle;
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4176 bar->dragging = make_number (cs->value);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4177 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4178 break;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4179
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4180 case XmCR_VALUE_CHANGED:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4181 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4182 };
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4183
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4184 if (part >= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4185 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4186 window_being_scrolled = bar->window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4187 last_scroll_bar_part = part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4188 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
4189 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4190 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4191
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4192
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4193 #else /* !USE_MOTIF, i.e. Xaw or GTK */
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4194 #ifdef USE_GTK
50177
297925dd73b1 New approach to scrolling and scroll bars for better redraw and smoother
Jan Djärv <jan.h.d@swipnet.se>
parents: 50151
diff changeset
4195 /* Scroll bar callback for GTK scroll bars. WIDGET is the scroll
50521
3b4cda88d7ef * xterm.c (xg_scroll_callback): Call gtk_range_get_adjustment to
Jan Djärv <jan.h.d@swipnet.se>
parents: 50371
diff changeset
4196 bar widget. DATA is a pointer to the scroll_bar structure. */
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4197
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4198 static void
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4199 xg_scroll_callback (widget, data)
50521
3b4cda88d7ef * xterm.c (xg_scroll_callback): Call gtk_range_get_adjustment to
Jan Djärv <jan.h.d@swipnet.se>
parents: 50371
diff changeset
4200 GtkRange *widget;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4201 gpointer data;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4202 {
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4203 struct scroll_bar *bar = (struct scroll_bar *) data;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4204 gdouble previous;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4205 gdouble position;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4206 gdouble *p;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4207 int diff;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
4208
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4209 int part = -1, whole = 0, portion = 0;
50521
3b4cda88d7ef * xterm.c (xg_scroll_callback): Call gtk_range_get_adjustment to
Jan Djärv <jan.h.d@swipnet.se>
parents: 50371
diff changeset
4210 GtkAdjustment *adj = GTK_ADJUSTMENT (gtk_range_get_adjustment (widget));
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
4211
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4212 if (xg_ignore_gtk_scrollbar) return;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
4213
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4214 position = gtk_adjustment_get_value (adj);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4215
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4216 p = g_object_get_data (G_OBJECT (widget), XG_LAST_SB_DATA);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4217 if (! p)
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4218 {
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4219 p = (gdouble*) xmalloc (sizeof (gdouble));
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4220 *p = XG_SB_MIN;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4221 g_object_set_data (G_OBJECT (widget), XG_LAST_SB_DATA, p);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4222 }
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4223
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4224 previous = *p;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4225 *p = position;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4226
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4227 diff = (int) (position - previous);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
4228
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4229 if (diff == (int) adj->step_increment)
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4230 {
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4231 part = scroll_bar_down_arrow;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4232 bar->dragging = Qnil;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4233 }
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4234 else if (-diff == (int) adj->step_increment)
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4235 {
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4236 part = scroll_bar_up_arrow;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4237 bar->dragging = Qnil;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4238 }
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4239 else if (diff == (int) adj->page_increment)
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4240 {
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4241 part = scroll_bar_below_handle;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4242 bar->dragging = Qnil;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4243 }
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4244 else if (-diff == (int) adj->page_increment)
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4245 {
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4246 part = scroll_bar_above_handle;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4247 bar->dragging = Qnil;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4248 }
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4249 else
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4250 {
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4251 part = scroll_bar_handle;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4252 whole = adj->upper - adj->page_size;
50177
297925dd73b1 New approach to scrolling and scroll bars for better redraw and smoother
Jan Djärv <jan.h.d@swipnet.se>
parents: 50151
diff changeset
4253 portion = min ((int)position, whole);
297925dd73b1 New approach to scrolling and scroll bars for better redraw and smoother
Jan Djärv <jan.h.d@swipnet.se>
parents: 50151
diff changeset
4254 bar->dragging = make_number ((int)portion);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4255 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
4256
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4257 if (part >= 0)
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4258 {
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4259 window_being_scrolled = bar->window;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4260 last_scroll_bar_part = part;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4261 x_send_scroll_bar_event (bar->window, part, portion, whole);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4262 }
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4263 }
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4264
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4265 #else /* not USE_GTK */
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4266
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4267 /* Xaw scroll bar callback. Invoked when the thumb is dragged.
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4268 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
4269 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
4270 the thumb is. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4271
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4272 static void
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4273 xaw_jump_callback (widget, client_data, call_data)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4274 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4275 XtPointer client_data, call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4276 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4277 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
4278 float top = *(float *) call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4279 float shown;
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4280 int whole, portion, height;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4281 int part;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4282
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4283 /* 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
4284 BLOCK_INPUT;
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4285 XtVaGetValues (widget, XtNshown, &shown, XtNheight, &height, NULL);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4286 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4287
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4288 whole = 10000000;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4289 portion = shown < 1 ? top * whole : 0;
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4290
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4291 if (shown < 1 && (abs (top + shown - 1) < 1.0/height))
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4292 /* Some derivatives of Xaw refuse to shrink the thumb when you reach
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4293 the bottom, so we force the scrolling whenever we see that we're
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4294 too close to the bottom (in x_set_toolkit_scroll_bar_thumb
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4295 we try to ensure that we always stay two pixels away from the
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4296 bottom). */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4297 part = scroll_bar_down_arrow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4298 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4299 part = scroll_bar_handle;
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 window_being_scrolled = bar->window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4302 bar->dragging = make_number (portion);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4303 last_scroll_bar_part = part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4304 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
4305 }
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
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4308 /* Xaw scroll bar callback. Invoked for incremental scrolling.,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4309 i.e. line or page up or down. WIDGET is the Xaw scroll bar
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4310 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
4311 the scroll bar. CALL_DATA is an integer specifying the action that
48085
1c06bf924a62 (Qeql): Declare.
Dave Love <fx@gnu.org>
parents: 48025
diff changeset
4312 has taken place. Its magnitude is in the range 0..height of the
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4313 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
4314 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
4315
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4316 static void
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4317 xaw_scroll_callback (widget, client_data, call_data)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4318 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4319 XtPointer client_data, call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4320 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4321 struct scroll_bar *bar = (struct scroll_bar *) client_data;
48100
cffd13ef1a1d (XTread_socket): Fix last change.
Dave Love <fx@gnu.org>
parents: 48085
diff changeset
4322 /* The position really is stored cast to a pointer. */
cffd13ef1a1d (XTread_socket): Fix last change.
Dave Love <fx@gnu.org>
parents: 48085
diff changeset
4323 int position = (long) call_data;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4324 Dimension height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4325 int part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4326
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4327 /* 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
4328 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4329 XtVaGetValues (widget, XtNheight, &height, NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4330 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4331
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4332 if (abs (position) >= height)
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4333 part = (position < 0) ? scroll_bar_above_handle : scroll_bar_below_handle;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4334
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4335 /* If Xaw3d was compiled with ARROW_SCROLLBAR,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4336 it maps line-movement to call_data = max(5, height/20). */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4337 else if (xaw3d_arrow_scroll && abs (position) <= max (5, height / 20))
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4338 part = (position < 0) ? scroll_bar_up_arrow : scroll_bar_down_arrow;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4339 else
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4340 part = scroll_bar_move_ratio;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4341
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4342 window_being_scrolled = bar->window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4343 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4344 last_scroll_bar_part = part;
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4345 x_send_scroll_bar_event (bar->window, part, position, height);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4346 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4347
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4348 #endif /* not USE_GTK */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4349 #endif /* not USE_MOTIF */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4350
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4351 #define SCROLL_BAR_NAME "verticalScrollBar"
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4352
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4353 /* 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
4354 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
4355
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4356 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4357 static void
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4358 x_create_toolkit_scroll_bar (f, bar)
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4359 struct frame *f;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4360 struct scroll_bar *bar;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4361 {
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4362 char *scroll_bar_name = SCROLL_BAR_NAME;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4363
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4364 BLOCK_INPUT;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4365 xg_create_scroll_bar (f, bar, G_CALLBACK (xg_scroll_callback),
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4366 scroll_bar_name);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4367 UNBLOCK_INPUT;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4368 }
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4369
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4370 #else /* not USE_GTK */
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4371
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4372 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4373 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
4374 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4375 struct scroll_bar *bar;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4376 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4377 Window xwindow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4378 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4379 Arg av[20];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4380 int ac = 0;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4381 char *scroll_bar_name = SCROLL_BAR_NAME;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4382 unsigned long pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4383
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4384 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4385
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4386 #ifdef USE_MOTIF
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4387 /* Set resources. Create the widget. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4388 XtSetArg (av[ac], XtNmappedWhenManaged, False); ++ac;
50324
d9a401f2769d (take_vertical_position_into_account): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50270
diff changeset
4389 XtSetArg (av[ac], XmNminimum, 0); ++ac;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4390 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
4391 XtSetArg (av[ac], XmNorientation, XmVERTICAL); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4392 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
4393 XtSetArg (av[ac], XmNincrement, 1); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4394 XtSetArg (av[ac], XmNpageIncrement, 1); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4395
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4396 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
4397 if (pixel != -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4398 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4399 XtSetArg (av[ac], XmNforeground, pixel);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4400 ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4401 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4402
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4403 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
4404 if (pixel != -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4405 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4406 XtSetArg (av[ac], XmNbackground, pixel);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4407 ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4408 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4409
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4410 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
4411 scroll_bar_name, av, ac);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4412
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4413 /* 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
4414 XtAddCallback (widget, XmNdecrementCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4415 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4416 XtAddCallback (widget, XmNdragCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4417 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4418 XtAddCallback (widget, XmNincrementCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4419 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4420 XtAddCallback (widget, XmNpageDecrementCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4421 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4422 XtAddCallback (widget, XmNpageIncrementCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4423 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4424 XtAddCallback (widget, XmNtoBottomCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4425 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4426 XtAddCallback (widget, XmNtoTopCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4427 (XtPointer) bar);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4428
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4429 /* 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
4430 XtRealizeWidget (widget);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4431
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4432 /* 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
4433 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
4434 XDefineCursor (XtDisplay (widget), XtWindow (widget),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4435 f->output_data.x->nontext_cursor);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4436
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4437 #else /* !USE_MOTIF i.e. use Xaw */
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4438
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4439 /* 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
4440 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
4441 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
4442 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
4443 XtSetArg (av[ac], XtNmappedWhenManaged, False); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4444 XtSetArg (av[ac], XtNorientation, XtorientVertical); ++ac;
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4445 /* For smoother scrolling with Xaw3d -sm */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4446 /* XtSetArg (av[ac], XtNpickTop, True); ++ac; */
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4447
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4448 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
4449 if (pixel != -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4450 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4451 XtSetArg (av[ac], XtNforeground, pixel);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4452 ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4453 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4454
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4455 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
4456 if (pixel != -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4457 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4458 XtSetArg (av[ac], XtNbackground, pixel);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4459 ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4460 }
39618
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4461
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4462 /* Top/bottom shadow colors. */
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4463
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4464 /* Allocate them, if necessary. */
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4465 if (f->output_data.x->scroll_bar_top_shadow_pixel == -1)
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4466 {
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4467 pixel = f->output_data.x->scroll_bar_background_pixel;
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4468 if (!x_alloc_lighter_color (f, FRAME_X_DISPLAY (f), FRAME_X_COLORMAP (f),
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4469 &pixel, 1.2, 0x8000))
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4470 pixel = -1;
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4471 f->output_data.x->scroll_bar_top_shadow_pixel = pixel;
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4472 }
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4473 if (f->output_data.x->scroll_bar_bottom_shadow_pixel == -1)
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4474 {
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4475 pixel = f->output_data.x->scroll_bar_background_pixel;
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4476 if (!x_alloc_lighter_color (f, FRAME_X_DISPLAY (f), FRAME_X_COLORMAP (f),
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4477 &pixel, 0.6, 0x4000))
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4478 pixel = -1;
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4479 f->output_data.x->scroll_bar_bottom_shadow_pixel = pixel;
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4480 }
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4481
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4482 /* Tell the toolkit about them. */
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4483 if (f->output_data.x->scroll_bar_top_shadow_pixel == -1
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4484 || f->output_data.x->scroll_bar_bottom_shadow_pixel == -1)
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4485 /* We tried to allocate a color for the top/bottom shadow, and
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4486 failed, so tell Xaw3d to use dithering instead. */
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4487 {
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4488 XtSetArg (av[ac], XtNbeNiceToColormap, True);
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4489 ++ac;
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4490 }
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4491 else
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4492 /* Tell what colors Xaw3d should use for the top/bottom shadow, to
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4493 be more consistent with other emacs 3d colors, and since Xaw3d is
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4494 not good at dealing with allocation failure. */
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4495 {
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4496 /* This tells Xaw3d to use real colors instead of dithering for
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4497 the shadows. */
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4498 XtSetArg (av[ac], XtNbeNiceToColormap, False);
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4499 ++ac;
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4500
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4501 /* Specify the colors. */
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4502 pixel = f->output_data.x->scroll_bar_top_shadow_pixel;
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4503 if (pixel != -1)
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4504 {
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4505 XtSetArg (av[ac], "topShadowPixel", pixel);
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4506 ++ac;
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4507 }
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4508 pixel = f->output_data.x->scroll_bar_bottom_shadow_pixel;
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4509 if (pixel != -1)
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4510 {
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4511 XtSetArg (av[ac], "bottomShadowPixel", pixel);
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4512 ++ac;
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4513 }
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4514 }
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4515
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4516 widget = XtCreateWidget (scroll_bar_name, scrollbarWidgetClass,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4517 f->output_data.x->edit_widget, av, ac);
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4518
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4519 {
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4520 char *initial = "";
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4521 char *val = initial;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4522 XtVaGetValues (widget, XtNscrollVCursor, (XtPointer) &val,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4523 XtNpickTop, (XtPointer) &xaw3d_pick_top, NULL);
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4524 if (val == initial)
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4525 { /* ARROW_SCROLL */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4526 xaw3d_arrow_scroll = True;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4527 /* Isn't that just a personal preference ? -sm */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4528 XtVaSetValues (widget, XtNcursorName, "top_left_arrow", NULL);
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4529 }
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4530 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4531
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4532 /* Define callbacks. */
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4533 XtAddCallback (widget, XtNjumpProc, xaw_jump_callback, (XtPointer) bar);
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4534 XtAddCallback (widget, XtNscrollProc, xaw_scroll_callback,
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4535 (XtPointer) bar);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4536
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4537 /* 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
4538 XtRealizeWidget (widget);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4539
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4540 #endif /* !USE_MOTIF */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4541
46814
f7dd9a44324f Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 46707
diff changeset
4542 /* Install an action hook that lets us detect when the user
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4543 finishes interacting with a scroll bar. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4544 if (action_hook_id == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4545 action_hook_id = XtAppAddActionHook (Xt_app_con, xt_action_hook, 0);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4546
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4547 /* 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
4548 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
4549 xwindow = XtWindow (widget);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4550 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
4551
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4552 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4553 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4554 #endif /* not USE_GTK */
24991
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4557 /* 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
4558 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
4559
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4560 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4561 static void
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4562 x_set_toolkit_scroll_bar_thumb (bar, portion, position, whole)
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4563 struct scroll_bar *bar;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4564 int portion, position, whole;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4565 {
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4566 xg_set_toolkit_scroll_bar_thumb (bar, portion, position, whole);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4567 }
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4568
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4569 #else /* not USE_GTK */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4570 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4571 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
4572 struct scroll_bar *bar;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4573 int portion, position, whole;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4574 {
33606
01f87b0ff56f (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
Gerd Moellmann <gerd@gnu.org>
parents: 33456
diff changeset
4575 struct frame *f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window)));
01f87b0ff56f (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
Gerd Moellmann <gerd@gnu.org>
parents: 33456
diff changeset
4576 Widget widget = SCROLL_BAR_X_WIDGET (FRAME_X_DISPLAY (f), bar);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4577 float top, shown;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4578
43884
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4579 BLOCK_INPUT;
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4580
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4581 #ifdef USE_MOTIF
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4582
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4583 /* We use an estimate of 30 chars per line rather than the real
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4584 `portion' value. This has the disadvantage that the thumb size
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4585 is not very representative, but it makes our life a lot easier.
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4586 Otherwise, we have to constantly adjust the thumb size, which
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4587 we can't always do quickly enough: while dragging, the size of
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4588 the thumb might prevent the user from dragging the thumb all the
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4589 way to the end. but Motif and some versions of Xaw3d don't allow
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4590 updating the thumb size while dragging. Also, even if we can update
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4591 its size, the update will often happen too late.
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4592 If you don't believe it, check out revision 1.650 of xterm.c to see
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4593 what hoops we were going through and the still poor behavior we got. */
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
4594 portion = WINDOW_TOTAL_LINES (XWINDOW (bar->window)) * 30;
43884
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4595 /* When the thumb is at the bottom, position == whole.
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4596 So we need to increase `whole' to make space for the thumb. */
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4597 whole += portion;
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4598
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4599 if (whole <= 0)
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4600 top = 0, shown = 1;
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4601 else
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4602 {
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4603 top = (float) position / whole;
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4604 shown = (float) portion / whole;
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4605 }
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4606
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4607 if (NILP (bar->dragging))
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4608 {
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4609 int size, value;
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4610
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4611 /* Slider size. Must be in the range [1 .. MAX - MIN] where MAX
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4612 is the scroll bar's maximum and MIN is the scroll bar's minimum
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4613 value. */
50324
d9a401f2769d (take_vertical_position_into_account): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50270
diff changeset
4614 size = shown * XM_SB_MAX;
d9a401f2769d (take_vertical_position_into_account): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50270
diff changeset
4615 size = min (size, XM_SB_MAX);
43884
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4616 size = max (size, 1);
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4617
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4618 /* Position. Must be in the range [MIN .. MAX - SLIDER_SIZE]. */
50324
d9a401f2769d (take_vertical_position_into_account): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50270
diff changeset
4619 value = top * XM_SB_MAX;
43884
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4620 value = min (value, XM_SB_MAX - size);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4621
43884
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4622 XmScrollBarSetValues (widget, value, size, 0, 0, False);
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4623 }
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4624 #else /* !USE_MOTIF i.e. use Xaw */
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4625
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4626 if (whole == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4627 top = 0, shown = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4628 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4629 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4630 top = (float) position / whole;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4631 shown = (float) portion / whole;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4632 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4633
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4634 {
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4635 float old_top, old_shown;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4636 Dimension height;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4637 XtVaGetValues (widget,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4638 XtNtopOfThumb, &old_top,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4639 XtNshown, &old_shown,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4640 XtNheight, &height,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4641 NULL);
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4642
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4643 /* Massage the top+shown values. */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4644 if (NILP (bar->dragging) || last_scroll_bar_part == scroll_bar_down_arrow)
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4645 top = max (0, min (1, top));
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4646 else
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4647 top = old_top;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4648 /* Keep two pixels available for moving the thumb down. */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4649 shown = max (0, min (1 - top - (2.0 / height), shown));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4650
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4651 /* 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
4652 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
4653 for `NARROWPROTO'. See s/freebsd.h for an example. */
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4654 if (top != old_top || shown != old_shown)
25101
6b42357f28f9 (x_set_toolkit_scroll_bar_thumb): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents: 25091
diff changeset
4655 {
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4656 if (NILP (bar->dragging))
25101
6b42357f28f9 (x_set_toolkit_scroll_bar_thumb): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents: 25091
diff changeset
4657 XawScrollbarSetThumb (widget, top, shown);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4658 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4659 {
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4660 #ifdef HAVE_XAW3D
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4661 ScrollbarWidget sb = (ScrollbarWidget) widget;
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
4662 int scroll_mode = 0;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4663
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4664 /* `scroll_mode' only exists with Xaw3d + ARROW_SCROLLBAR. */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4665 if (xaw3d_arrow_scroll)
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4666 {
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4667 /* Xaw3d stupidly ignores resize requests while dragging
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4668 so we have to make it believe it's not in dragging mode. */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4669 scroll_mode = sb->scrollbar.scroll_mode;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4670 if (scroll_mode == 2)
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4671 sb->scrollbar.scroll_mode = 0;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4672 }
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4673 #endif
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4674 /* Try to make the scrolling a tad smoother. */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4675 if (!xaw3d_pick_top)
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4676 shown = min (shown, old_shown);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4677
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4678 XawScrollbarSetThumb (widget, top, shown);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4679
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4680 #ifdef HAVE_XAW3D
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4681 if (xaw3d_arrow_scroll && scroll_mode == 2)
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4682 sb->scrollbar.scroll_mode = scroll_mode;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4683 #endif
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4684 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4685 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4686 }
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4687 #endif /* !USE_MOTIF */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4688
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4689 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4690 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4691 #endif /* not USE_GTK */
24991
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 #endif /* USE_TOOLKIT_SCROLL_BARS */
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4696
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4697 /************************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4698 Scroll bars, general
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4699 ************************************************************************/
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4700
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4701 /* 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
4702 the Emacs window on which to create the scroll bar. TOP, LEFT,
43591
44b1361176db Fix typos.
Pavel Janík <Pavel@Janik.cz>
parents: 43479
diff changeset
4703 WIDTH and HEIGHT are the pixel coordinates and dimensions of the
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4704 scroll bar. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4705
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
4706 static struct scroll_bar *
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4707 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
4708 struct window *w;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4709 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
4710 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4711 struct frame *f = XFRAME (w->frame);
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
4712 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
4713 = 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
4714
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4715 BLOCK_INPUT;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4716
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
4717 #ifdef USE_TOOLKIT_SCROLL_BARS
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4718 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
4719 #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
4720 {
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4721 XSetWindowAttributes a;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4722 unsigned long mask;
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
4723 Window window;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4724
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4725 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
4726 if (a.background_pixel == -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4727 a.background_pixel = f->output_data.x->background_pixel;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4728
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4729 a.event_mask = (ButtonPressMask | ButtonReleaseMask
1793
cf4c3f01ddb9 * xterm.c (x_scrollbar_create): Include PointerMotionHintMask in
Jim Blandy <jimb@redhat.com>
parents: 1787
diff changeset
4730 | ButtonMotionMask | PointerMotionHintMask
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4731 | ExposureMask);
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
4732 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
4733
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4734 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
4735
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4736 /* 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
4737 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
4738 this case, no clear_frame is generated to reduce flickering. */
40610
e2da1b3f3d94 (x_scroll_bar_create): Check for width and height > 0.
Gerd Moellmann <gerd@gnu.org>
parents: 40514
diff changeset
4739 if (width > 0 && height > 0)
e2da1b3f3d94 (x_scroll_bar_create): Check for width and height > 0.
Gerd Moellmann <gerd@gnu.org>
parents: 40514
diff changeset
4740 x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
e2da1b3f3d94 (x_scroll_bar_create): Check for width and height > 0.
Gerd Moellmann <gerd@gnu.org>
parents: 40514
diff changeset
4741 left, top, width,
e2da1b3f3d94 (x_scroll_bar_create): Check for width and height > 0.
Gerd Moellmann <gerd@gnu.org>
parents: 40514
diff changeset
4742 window_box_height (w), False);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4743
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4744 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
4745 /* Position and size of scroll bar. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4746 left + VERTICAL_SCROLL_BAR_WIDTH_TRIM,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4747 top,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4748 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
4749 height,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4750 /* Border width, depth, class, and visual. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4751 0,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4752 CopyFromParent,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4753 CopyFromParent,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4754 CopyFromParent,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4755 /* Attributes. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4756 mask, &a);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4757 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
4758 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4759 #endif /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4760
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4761 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
4762 XSETINT (bar->top, top);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
4763 XSETINT (bar->left, left);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
4764 XSETINT (bar->width, width);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
4765 XSETINT (bar->height, height);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
4766 XSETINT (bar->start, 0);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
4767 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
4768 bar->dragging = Qnil;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4769
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4770 /* 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
4771 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
4772 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
4773 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
4774 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
4775 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
4776
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4777 /* Map the window/widget. */
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
4778 #ifdef USE_TOOLKIT_SCROLL_BARS
36475
488c4787ec0a (XTset_vertical_scroll_bar): Don't clear a zero height
Gerd Moellmann <gerd@gnu.org>
parents: 36442
diff changeset
4779 {
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4780 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4781 xg_update_scrollbar_pos (f,
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4782 SCROLL_BAR_X_WINDOW (bar),
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4783 top,
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4784 left + VERTICAL_SCROLL_BAR_WIDTH_TRIM,
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4785 width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2,
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50247
diff changeset
4786 max (height, 1),
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50247
diff changeset
4787 left,
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50247
diff changeset
4788 width);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4789 xg_show_scroll_bar (SCROLL_BAR_X_WINDOW (bar));
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4790 #else /* not USE_GTK */
36475
488c4787ec0a (XTset_vertical_scroll_bar): Don't clear a zero height
Gerd Moellmann <gerd@gnu.org>
parents: 36442
diff changeset
4791 Widget scroll_bar = SCROLL_BAR_X_WIDGET (FRAME_X_DISPLAY (f), bar);
488c4787ec0a (XTset_vertical_scroll_bar): Don't clear a zero height
Gerd Moellmann <gerd@gnu.org>
parents: 36442
diff changeset
4792 XtConfigureWidget (scroll_bar,
488c4787ec0a (XTset_vertical_scroll_bar): Don't clear a zero height
Gerd Moellmann <gerd@gnu.org>
parents: 36442
diff changeset
4793 left + VERTICAL_SCROLL_BAR_WIDTH_TRIM,
488c4787ec0a (XTset_vertical_scroll_bar): Don't clear a zero height
Gerd Moellmann <gerd@gnu.org>
parents: 36442
diff changeset
4794 top,
488c4787ec0a (XTset_vertical_scroll_bar): Don't clear a zero height
Gerd Moellmann <gerd@gnu.org>
parents: 36442
diff changeset
4795 width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2,
488c4787ec0a (XTset_vertical_scroll_bar): Don't clear a zero height
Gerd Moellmann <gerd@gnu.org>
parents: 36442
diff changeset
4796 max (height, 1), 0);
488c4787ec0a (XTset_vertical_scroll_bar): Don't clear a zero height
Gerd Moellmann <gerd@gnu.org>
parents: 36442
diff changeset
4797 XtMapWidget (scroll_bar);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4798 #endif /* not USE_GTK */
36475
488c4787ec0a (XTset_vertical_scroll_bar): Don't clear a zero height
Gerd Moellmann <gerd@gnu.org>
parents: 36442
diff changeset
4799 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4800 #else /* not USE_TOOLKIT_SCROLL_BARS */
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
4801 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
4802 #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
4803
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4804 UNBLOCK_INPUT;
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4805 return bar;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4806 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4807
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4808
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4809 /* Draw BAR's handle in the proper position.
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4810
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4811 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
4812 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
4813 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
4814 events.)
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4815
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4816 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
4817 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
4818 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
4819 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
4820 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
4821
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
4822 #ifndef USE_TOOLKIT_SCROLL_BARS
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
4823
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4824 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
4825 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
4826 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
4827 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
4828 int rebuild;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4829 {
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4830 int dragging = ! NILP (bar->dragging);
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
4831 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
4832 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
4833 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
4834
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4835 /* 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
4836 if (! rebuild
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4837 && 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
4838 && 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
4839 return;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4840
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4841 BLOCK_INPUT;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4842
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4843 {
16251
ec1b1ae37295 Pass frame arg in calls to VERTICAL_SCROLL_BAR_INSIDE_HEIGHT
Richard M. Stallman <rms@gnu.org>
parents: 16220
diff changeset
4844 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
4845 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
4846 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
4847
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4848 /* 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
4849 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
4850 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4851 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
4852
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4853 if (start < 0)
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4854 start = 0;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4855 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
4856 start = top_range;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4857 end = start + length;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4858
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4859 if (end < start)
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4860 end = start;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4861 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
4862 end = top_range;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4863 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4864
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
4865 /* 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
4866 XSETINT (bar->start, start);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
4867 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
4868
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4869 /* 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
4870 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
4871 end = top_range;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4872
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
4873 /* 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
4874 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
4875 that many pixels tall. */
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
4876 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
4877
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4878 /* 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
4879 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
4880 if (0 < start)
35581
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
4881 x_clear_area (FRAME_X_DISPLAY (f), w,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
4882 /* x, y, width, height, and exposures. */
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
4883 VERTICAL_SCROLL_BAR_LEFT_BORDER,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
4884 VERTICAL_SCROLL_BAR_TOP_BORDER,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
4885 inside_width, start,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
4886 False);
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4887
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4888 /* 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
4889 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
4890 XSetForeground (FRAME_X_DISPLAY (f), gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4891 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
4892
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4893 /* 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
4894 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
4895 /* x, y, width, height */
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
4896 VERTICAL_SCROLL_BAR_LEFT_BORDER,
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
4897 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
4898 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
4899
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4900 /* 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
4901 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
4902 XSetForeground (FRAME_X_DISPLAY (f), gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4903 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
4904
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4905 /* 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
4906 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
4907 if (end < inside_height)
35581
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
4908 x_clear_area (FRAME_X_DISPLAY (f), w,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
4909 /* x, y, width, height, and exposures. */
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
4910 VERTICAL_SCROLL_BAR_LEFT_BORDER,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
4911 VERTICAL_SCROLL_BAR_TOP_BORDER + end,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
4912 inside_width, inside_height - end,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
4913 False);
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4914
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4915 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4916
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4917 UNBLOCK_INPUT;
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
4918 }
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
4919
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
4920 #endif /* !USE_TOOLKIT_SCROLL_BARS */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4921
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4922 /* 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
4923 nil. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4924
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4925 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
4926 x_scroll_bar_remove (bar)
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
4927 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
4928 {
33606
01f87b0ff56f (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
Gerd Moellmann <gerd@gnu.org>
parents: 33456
diff changeset
4929 struct frame *f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window)));
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4930 BLOCK_INPUT;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4931
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
4932 #ifdef USE_TOOLKIT_SCROLL_BARS
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4933 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4934 xg_remove_scroll_bar (f, SCROLL_BAR_X_WINDOW (bar));
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4935 #else /* not USE_GTK */
33606
01f87b0ff56f (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
Gerd Moellmann <gerd@gnu.org>
parents: 33456
diff changeset
4936 XtDestroyWidget (SCROLL_BAR_X_WIDGET (FRAME_X_DISPLAY (f), bar));
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4937 #endif /* not USE_GTK */
33606
01f87b0ff56f (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
Gerd Moellmann <gerd@gnu.org>
parents: 33456
diff changeset
4938 #else
01f87b0ff56f (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
Gerd Moellmann <gerd@gnu.org>
parents: 33456
diff changeset
4939 XDestroyWindow (FRAME_X_DISPLAY (f), SCROLL_BAR_X_WINDOW (bar));
01f87b0ff56f (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
Gerd Moellmann <gerd@gnu.org>
parents: 33456
diff changeset
4940 #endif
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4941
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
4942 /* 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
4943 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
4944
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4945 UNBLOCK_INPUT;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4946 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4947
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4948
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4949 /* 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
4950 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
4951 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
4952 create one. */
24991
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 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4955 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
4956 struct window *w;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4957 int portion, whole, position;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4958 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4959 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
4960 struct scroll_bar *bar;
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
4961 int top, height, left, sb_left, width, sb_width;
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
4962 int window_y, window_height;
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
4963
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
4964 /* Get window dimensions. */
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
4965 window_box (w, -1, 0, &window_y, 0, &window_height);
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
4966 top = window_y;
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
4967 width = WINDOW_CONFIG_SCROLL_BAR_COLS (w) * FRAME_COLUMN_WIDTH (f);
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
4968 height = window_height;
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
4969
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
4970 /* Compute the left edge of the scroll bar area. */
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
4971 left = WINDOW_SCROLL_BAR_AREA_X (w);
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
4972
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
4973 /* Compute the width of the scroll bar which might be less than
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
4974 the width of the area reserved for the scroll bar. */
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
4975 if (WINDOW_CONFIG_SCROLL_BAR_WIDTH (w) > 0)
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
4976 sb_width = WINDOW_CONFIG_SCROLL_BAR_WIDTH (w);
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
4977 else
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
4978 sb_width = width;
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
4979
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
4980 /* Compute the left edge of the scroll bar. */
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
4981 #ifdef USE_TOOLKIT_SCROLL_BARS
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
4982 if (WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_RIGHT (w))
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4983 sb_left = left + width - sb_width - (width - sb_width) / 2;
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
4984 else
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
4985 sb_left = left + (width - sb_width) / 2;
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
4986 #else
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
4987 if (WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_RIGHT (w))
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4988 sb_left = left + width - sb_width;
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
4989 else
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
4990 sb_left = left;
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
4991 #endif
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4992
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
4993 /* 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
4994 if (NILP (w->vertical_scroll_bar))
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
4995 {
40610
e2da1b3f3d94 (x_scroll_bar_create): Check for width and height > 0.
Gerd Moellmann <gerd@gnu.org>
parents: 40514
diff changeset
4996 if (width > 0 && height > 0)
40257
98531a716f48 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 40248
diff changeset
4997 {
98531a716f48 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 40248
diff changeset
4998 BLOCK_INPUT;
98531a716f48 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 40248
diff changeset
4999 x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
98531a716f48 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 40248
diff changeset
5000 left, top, width, height, False);
98531a716f48 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 40248
diff changeset
5001 UNBLOCK_INPUT;
98531a716f48 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 40248
diff changeset
5002 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
5003
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5004 bar = x_scroll_bar_create (w, top, sb_left, sb_width, height);
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5005 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5006 else
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5007 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5008 /* 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
5009 unsigned int mask = 0;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
5010
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5011 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
5012
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5013 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5014
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5015 if (sb_left != XINT (bar->left))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5016 mask |= CWX;
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5017 if (top != XINT (bar->top))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5018 mask |= CWY;
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5019 if (sb_width != XINT (bar->width))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5020 mask |= CWWidth;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
5021 if (height != XINT (bar->height))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5022 mask |= CWHeight;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
5023
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5024 #ifdef USE_TOOLKIT_SCROLL_BARS
25269
621067279f19 (XTset_vertical_scroll_bar) [USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 25191
diff changeset
5025
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5026 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5027 if (mask)
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5028 xg_update_scrollbar_pos (f,
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5029 SCROLL_BAR_X_WINDOW (bar),
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5030 top,
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5031 sb_left + VERTICAL_SCROLL_BAR_WIDTH_TRIM,
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5032 sb_width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2,
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50247
diff changeset
5033 max (height, 1),
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50247
diff changeset
5034 left,
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50247
diff changeset
5035 width);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5036 #else /* not USE_GTK */
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5037
25269
621067279f19 (XTset_vertical_scroll_bar) [USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 25191
diff changeset
5038 /* Since toolkit scroll bars are smaller than the space reserved
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5039 for them on the frame, we have to clear "under" them. */
40610
e2da1b3f3d94 (x_scroll_bar_create): Check for width and height > 0.
Gerd Moellmann <gerd@gnu.org>
parents: 40514
diff changeset
5040 if (width > 0 && height > 0)
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5041 x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5042 left, top, width, height, False);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5043 /* Move/size the scroll bar widget. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5044 if (mask)
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5045 XtConfigureWidget (SCROLL_BAR_X_WIDGET (FRAME_X_DISPLAY (f), bar),
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5046 sb_left + VERTICAL_SCROLL_BAR_WIDTH_TRIM,
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5047 top,
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5048 sb_width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2,
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5049 max (height, 1), 0);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5050
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5051 #endif /* not USE_GTK */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5052 #else /* not USE_TOOLKIT_SCROLL_BARS */
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
5053
36880
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
5054 /* Clear areas not covered by the scroll bar because of
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
5055 VERTICAL_SCROLL_BAR_WIDTH_TRIM. */
25633
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
5056 if (VERTICAL_SCROLL_BAR_WIDTH_TRIM)
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
5057 {
35581
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5058 x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5059 left, top, VERTICAL_SCROLL_BAR_WIDTH_TRIM,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5060 height, False);
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5061 x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5062 left + width - VERTICAL_SCROLL_BAR_WIDTH_TRIM,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5063 top, VERTICAL_SCROLL_BAR_WIDTH_TRIM,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5064 height, False);
25633
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
5065 }
36880
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
5066
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
5067 /* Clear areas not covered by the scroll bar because it's not as
43591
44b1361176db Fix typos.
Pavel Janík <Pavel@Janik.cz>
parents: 43479
diff changeset
5068 wide as the area reserved for it. This makes sure a
36880
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
5069 previous mode line display is cleared after C-x 2 C-x 1, for
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
5070 example. */
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
5071 {
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
5072 int area_width = WINDOW_CONFIG_SCROLL_BAR_COLS (w) * FRAME_COLUMN_WIDTH (f);
36880
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
5073 int rest = area_width - sb_width;
40329
c1762ce8905b (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 40303
diff changeset
5074 if (rest > 0 && height > 0)
c1762ce8905b (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 40303
diff changeset
5075 {
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
5076 if (WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT (w))
40329
c1762ce8905b (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 40303
diff changeset
5077 x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
c1762ce8905b (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 40303
diff changeset
5078 left + area_width - rest, top,
c1762ce8905b (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 40303
diff changeset
5079 rest, height, False);
c1762ce8905b (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 40303
diff changeset
5080 else
c1762ce8905b (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 40303
diff changeset
5081 x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
c1762ce8905b (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 40303
diff changeset
5082 left, top, rest, height, False);
c1762ce8905b (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 40303
diff changeset
5083 }
36880
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
5084 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
5085
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5086 /* Move/size the scroll bar window. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5087 if (mask)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5088 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5089 XWindowChanges wc;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
5090
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5091 wc.x = sb_left + VERTICAL_SCROLL_BAR_WIDTH_TRIM;
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5092 wc.y = top;
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5093 wc.width = sb_width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2;
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5094 wc.height = height;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5095 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
5096 mask, &wc);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5097 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
5098
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5099 #endif /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5100
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5101 /* Remember new settings. */
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5102 XSETINT (bar->left, sb_left);
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5103 XSETINT (bar->top, top);
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5104 XSETINT (bar->width, sb_width);
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5105 XSETINT (bar->height, height);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
5106
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5107 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5108 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5109
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
5110 #ifdef USE_TOOLKIT_SCROLL_BARS
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5111 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
5112 #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
5113 /* 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
5114 dragged. */
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5115 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
5116 {
25541
be975dcf4a0c (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 25529
diff changeset
5117 int top_range = VERTICAL_SCROLL_BAR_TOP_RANGE (f, height);
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5118
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5119 if (whole == 0)
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5120 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
5121 else
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5122 {
3686
910ea1d66bfd * xterm.c (XTset_vertical_scroll_bar): Use double type for
Jim Blandy <jimb@redhat.com>
parents: 3683
diff changeset
5123 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
5124 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
5125 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
5126 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5127 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5128 #endif /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5129
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5130 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
5131 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5132
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5133
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5134 /* 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
5135 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
5136 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
5137 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
5138 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
5139 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
5140 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
5141
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5142 /* 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
5143 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
5144 `*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
5145
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
5146 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5147 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
5148 FRAME_PTR frame;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5149 {
13205
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
5150 /* 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
5151 while (! NILP (FRAME_SCROLL_BARS (frame)))
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
5152 {
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
5153 Lisp_Object bar;
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
5154 bar = FRAME_SCROLL_BARS (frame);
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
5155 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
5156 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
5157 XSCROLL_BAR (bar)->prev = Qnil;
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
5158 if (! NILP (FRAME_CONDEMNED_SCROLL_BARS (frame)))
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
5159 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
5160 FRAME_CONDEMNED_SCROLL_BARS (frame) = bar;
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
5161 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5162 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5163
33303
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5164
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5165 /* 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
5166 Note that WINDOW isn't necessarily condemned at all. */
33303
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5167
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5168 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5169 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
5170 struct window *window;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5171 {
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5172 struct scroll_bar *bar;
33303
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5173 struct frame *f;
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5174
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5175 /* 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
5176 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
5177 abort ();
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5178
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5179 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
5180
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5181 /* Unlink it from the condemned list. */
33303
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5182 f = XFRAME (WINDOW_FRAME (window));
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5183 if (NILP (bar->prev))
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5184 {
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5185 /* If the prev pointer is nil, it must be the first in one of
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5186 the lists. */
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5187 if (EQ (FRAME_SCROLL_BARS (f), window->vertical_scroll_bar))
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5188 /* It's not condemned. Everything's fine. */
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5189 return;
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5190 else if (EQ (FRAME_CONDEMNED_SCROLL_BARS (f),
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5191 window->vertical_scroll_bar))
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5192 FRAME_CONDEMNED_SCROLL_BARS (f) = bar->next;
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5193 else
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5194 /* If its prev pointer is nil, it must be at the front of
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5195 one or the other! */
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5196 abort ();
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5197 }
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5198 else
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5199 XSCROLL_BAR (bar->prev)->next = bar->next;
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5200
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5201 if (! NILP (bar->next))
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5202 XSCROLL_BAR (bar->next)->prev = bar->prev;
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5203
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5204 bar->next = FRAME_SCROLL_BARS (f);
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5205 bar->prev = Qnil;
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5206 XSETVECTOR (FRAME_SCROLL_BARS (f), bar);
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5207 if (! NILP (bar->next))
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5208 XSETVECTOR (XSCROLL_BAR (bar->next)->prev, bar);
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5209 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5210
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5211 /* 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
5212 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
5213
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5214 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5215 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
5216 FRAME_PTR f;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5217 {
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5218 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
5219
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5220 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
5221
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
5222 /* 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
5223 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
5224 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
5225
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
5226 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
5227 {
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5228 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
5229
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5230 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
5231
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5232 next = b->next;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5233 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
5234 }
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5235
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5236 /* 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
5237 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
5238 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5239
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5240
50324
d9a401f2769d (take_vertical_position_into_account): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50270
diff changeset
5241 #ifndef USE_TOOLKIT_SCROLL_BARS
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5242 /* 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
5243 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
5244
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5245 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
5246 mark bits. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5247
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5248 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5249 x_scroll_bar_expose (bar, event)
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5250 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
5251 XEvent *event;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5252 {
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5253 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
5254 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
5255 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
5256 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
5257
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5258 BLOCK_INPUT;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5259
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5260 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
5261
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5262 /* 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
5263 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
5264
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5265 /* 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
5266 0, 0,
16301
a02555b4b2b9 (x_scroll_bar_create, x_scroll_bar_move):
Richard M. Stallman <rms@gnu.org>
parents: 16251
diff changeset
5267 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
5268 XINT (bar->height) - 1);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
5269
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5270 UNBLOCK_INPUT;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5271
50324
d9a401f2769d (take_vertical_position_into_account): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50270
diff changeset
5272 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5273 #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
5274
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5275 /* Handle a mouse click on the scroll bar BAR. If *EMACS_EVENT's kind
45803
9484de301252 Rename enum event_kind items.
Pavel Janík <Pavel@Janik.cz>
parents: 45563
diff changeset
5276 is set to something other than NO_EVENT, it is enqueued.
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5277
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5278 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
5279 mark bits. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5280
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
5281
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5282 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5283 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
5284 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
5285 XEvent *event;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5286 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
5287 {
10287
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
5288 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
5289 abort ();
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5290
45803
9484de301252 Rename enum event_kind items.
Pavel Janík <Pavel@Janik.cz>
parents: 45563
diff changeset
5291 emacs_event->kind = SCROLL_BAR_CLICK_EVENT;
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
5292 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
5293 emacs_event->modifiers
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
5294 = (x_x_to_emacs_modifiers (FRAME_X_DISPLAY_INFO
10287
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
5295 (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
5296 event->xbutton.state)
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
5297 | (event->type == ButtonRelease
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
5298 ? up_modifier
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
5299 : down_modifier));
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5300 emacs_event->frame_or_window = bar->window;
30197
3237a5529020 (construct_mouse_click, x_scroll_bar_to_input_event)
Gerd Moellmann <gerd@gnu.org>
parents: 30182
diff changeset
5301 emacs_event->arg = Qnil;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5302 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
5303 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5304 #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
5305 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
5306 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
5307 = 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
5308 #endif
10287
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
5309 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
5310 = 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
5311 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
5312
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5313 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
5314 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
5315
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5316 if (y < XINT (bar->start))
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5317 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
5318 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
5319 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
5320 else
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5321 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
5322
5440f00480e6 * xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents: 2923
diff changeset
5323 /* 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
5324 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
5325 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
5326 #if 0
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5327 /* 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
5328 holding it. */
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5329 if (event->type == ButtonPress
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5330 && 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
5331 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
5332 #endif
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5333
50064
40170697bff1 Implement Ctrl-Mouse-2 (split vertically) for toolkit scrollbars
Jan Djärv <jan.h.d@swipnet.se>
parents: 50056
diff changeset
5334 #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
5335 /* 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
5336 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
5337 && ! NILP (bar->dragging))
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5338 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5339 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
5340 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
5341
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5342 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
5343 bar->dragging = Qnil;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5344 }
50064
40170697bff1 Implement Ctrl-Mouse-2 (split vertically) for toolkit scrollbars
Jan Djärv <jan.h.d@swipnet.se>
parents: 50056
diff changeset
5345 #endif
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5346
2958
3124e6244d1a * xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents: 2953
diff changeset
5347 /* 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
5348 #if 0
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
5349 /* 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
5350 the handle. */
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5351 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
5352 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
5353 else
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
5354 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
5355 #else
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
5356 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
5357 #endif
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5358
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
5359 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
5360 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5361 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5362
50064
40170697bff1 Implement Ctrl-Mouse-2 (split vertically) for toolkit scrollbars
Jan Djärv <jan.h.d@swipnet.se>
parents: 50056
diff changeset
5363 #ifndef USE_TOOLKIT_SCROLL_BARS
40170697bff1 Implement Ctrl-Mouse-2 (split vertically) for toolkit scrollbars
Jan Djärv <jan.h.d@swipnet.se>
parents: 50056
diff changeset
5364
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5365 /* 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
5366
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5367 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
5368 mark bits. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5369
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5370 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5371 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
5372 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
5373 XEvent *event;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5374 {
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
5375 FRAME_PTR f = XFRAME (XWINDOW (bar->window)->frame);
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
5376
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5377 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
5378
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
5379 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
5380 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
5381
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5382 /* 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
5383 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
5384 {
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5385 /* 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
5386 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
5387
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5388 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
5389 {
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5390 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
5391
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5392 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
5393 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5394 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5395 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5396
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
5397 #endif /* !USE_TOOLKIT_SCROLL_BARS */
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
5398
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5399 /* 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
5400 on the scroll bar. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5401
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5402 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
5403 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
5404 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
5405 Lisp_Object *bar_window;
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5406 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
5407 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
5408 unsigned long *time;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5409 {
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5410 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
5411 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
5412 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
5413 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
5414 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
5415 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
5416 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
5417
1803
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
5418 BLOCK_INPUT;
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
5419
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5420 /* 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
5421 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
5422 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
5423
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
5424 /* 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
5425 &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
5426 &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
5427
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
5428 /* 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
5429 &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
5430
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
5431 /* 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
5432 &dummy_mask))
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
5433 ;
2982
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
5434 else
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
5435 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5436 #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
5437 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
5438 = 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
5439 #endif
2982
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
5440 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
5441 = 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
5442
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
5443 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
5444
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
5445 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
5446 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
5447
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
5448 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
5449 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
5450 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
5451 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
5452
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
5453 *fp = f;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
5454 *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
5455
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
5456 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
5457 *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
5458 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
5459 *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
5460 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
5461 *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
5462 else
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
5463 *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
5464
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
5465 XSETINT (*x, win_y);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
5466 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
5467
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
5468 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
5469 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
5470 }
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
5471
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
5472 *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
5473
1803
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
5474 UNBLOCK_INPUT;
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5475 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5476
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5477
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5478 /* 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
5479 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
5480 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
5481 redraw them. */
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5482
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
5483 void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5484 x_scroll_bar_clear (f)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5485 FRAME_PTR f;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5486 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5487 #ifndef USE_TOOLKIT_SCROLL_BARS
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5488 Lisp_Object bar;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5489
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
5490 /* 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
5491 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
5492 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
5493 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
5494 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
5495 bar = XSCROLL_BAR (bar)->next)
35581
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5496 XClearArea (FRAME_X_DISPLAY (f),
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5497 SCROLL_BAR_X_WINDOW (XSCROLL_BAR (bar)),
15080
50f527612ef6 (x_scroll_bar_clear): Do nothing if frame now has no scroll bars.
Richard M. Stallman <rms@gnu.org>
parents: 15067
diff changeset
5498 0, 0, 0, 0, True);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5499 #endif /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5500 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5501
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5502
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5503 /* 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
5504
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5505 struct selection_event_queue
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5506 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5507 XEvent event;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5508 struct selection_event_queue *next;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5509 };
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5510
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5511 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
5512
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5513 /* 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
5514
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5515 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
5516
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5517 /* 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
5518
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5519 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
5520 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
5521 FRAME_PTR f;
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5522 XEvent *event;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5523 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5524 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
5525 = (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
5526
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
5527 if (queue_tmp != NULL)
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5528 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5529 queue_tmp->event = *event;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5530 queue_tmp->next = queue;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5531 queue = queue_tmp;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5532 }
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5533 }
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5534
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5535 /* 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
5536 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
5537
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5538 static void
10634
de7beeb9f02c (x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents: 10609
diff changeset
5539 x_unqueue_events (display)
de7beeb9f02c (x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents: 10609
diff changeset
5540 Display *display;
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5541 {
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
5542 while (queue != NULL)
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5543 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5544 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
5545 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
5546 queue = queue_tmp->next;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5547 xfree ((char *)queue_tmp);
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5548 }
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5549 }
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5550
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5551 /* Start queuing SelectionRequest events. */
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5552
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5553 void
10634
de7beeb9f02c (x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents: 10609
diff changeset
5554 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
5555 Display *display;
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5556 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5557 x_queue_selection_requests++;
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5558 }
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5559
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5560 /* Stop queuing SelectionRequest events. */
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5561
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5562 void
10634
de7beeb9f02c (x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents: 10609
diff changeset
5563 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
5564 Display *display;
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5565 {
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5566 x_queue_selection_requests--;
10634
de7beeb9f02c (x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents: 10609
diff changeset
5567 x_unqueue_events (display);
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5568 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5569
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5570 /* The main X event-reading loop - XTread_socket. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5571
43479
4cedb4e5510e (enter_timestamp): Put in #if 0 to prevent warning.
Pavel Janík <Pavel@Janik.cz>
parents: 43369
diff changeset
5572 #if 0
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5573 /* 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
5574 but we have to put it out here, since static variables within functions
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5575 sometimes don't work. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5576
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5577 static Time enter_timestamp;
43479
4cedb4e5510e (enter_timestamp): Put in #if 0 to prevent warning.
Pavel Janík <Pavel@Janik.cz>
parents: 43369
diff changeset
5578 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5579
1436
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
5580 /* 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
5581 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
5582 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
5583 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
5584
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
5585 This must be defined outside of XTread_socket, for the same reasons
41446
4d04ea305201 Fix typo in comment.
Pavel Janík <Pavel@Janik.cz>
parents: 41213
diff changeset
5586 given for enter_timestamp, above. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5587
1436
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
5588 static XComposeStatus compose_status;
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
5589
2064
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
5590 /* Record the last 100 characters stored
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
5591 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
5592
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
5593 static int temp_index;
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
5594 static short temp_buffer[100];
2064
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
5595
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
5596 /* 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
5597 on a particular display. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5598
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
5599 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
5600
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
5601 /* 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
5602 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
5603 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
5604 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
5605
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
5606 static struct x_display_info *next_noop_dpyinfo;
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
5607
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5608 #define SET_SAVED_MENU_EVENT(size) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5609 do \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5610 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5611 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
5612 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
5613 = (XEvent *) xmalloc (sizeof (XEvent)); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5614 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
5615 if (numchars >= 1) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5616 { \
45803
9484de301252 Rename enum event_kind items.
Pavel Janík <Pavel@Janik.cz>
parents: 45563
diff changeset
5617 bufp->kind = MENU_BAR_ACTIVATE_EVENT; \
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5618 XSETFRAME (bufp->frame_or_window, f); \
30197
3237a5529020 (construct_mouse_click, x_scroll_bar_to_input_event)
Gerd Moellmann <gerd@gnu.org>
parents: 30182
diff changeset
5619 bufp->arg = Qnil; \
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5620 bufp++; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5621 count++; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5622 numchars--; \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5623 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5624 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5625 while (0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5626
15711
099dc465c948 (SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents: 15639
diff changeset
5627 #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
5628 #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
5629
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5630
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5631 enum
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5632 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5633 X_EVENT_NORMAL,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5634 X_EVENT_GOTO_OUT,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5635 X_EVENT_DROP
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5636 };
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5637
49434
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5638 /* Filter events for the current X input method.
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5639 DPYINFO is the display this event is for.
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5640 EVENT is the X event to filter.
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5641
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5642 Returns non-zero if the event was filtered, caller shall not process
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5643 this event further.
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5644 Returns zero if event is wasn't filtered. */
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
5645
49434
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5646 #ifdef HAVE_X_I18N
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5647 static int
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5648 x_filter_event (dpyinfo, event)
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5649 struct x_display_info *dpyinfo;
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5650 XEvent *event;
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5651 {
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5652 /* XFilterEvent returns non-zero if the input method has
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5653 consumed the event. We pass the frame's X window to
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5654 XFilterEvent because that's the one for which the IC
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5655 was created. */
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5656
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5657 struct frame *f1 = x_any_window_to_frame (dpyinfo,
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5658 event->xclient.window);
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5659
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5660 return XFilterEvent (event, f1 ? FRAME_X_WINDOW (f1) : None);
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5661 }
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5662 #endif
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5663
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5664 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5665 static struct x_display_info *current_dpyinfo;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5666 static struct input_event **current_bufp;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5667 static int *current_numcharsp;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5668 static int current_count;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5669 static int current_finish;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5670
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5671 /* This is the filter function invoked by the GTK event loop.
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5672 It is invoked before the XEvent is translated to a GdkEvent,
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5673 so we have a chanse to act on the event before GTK. */
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5674 static GdkFilterReturn
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5675 event_handler_gdk (gxev, ev, data)
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5676 GdkXEvent *gxev;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5677 GdkEvent *ev;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5678 gpointer data;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5679 {
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5680 XEvent *xev = (XEvent*)gxev;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5681
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5682 if (current_numcharsp)
49434
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5683 {
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5684 #ifdef HAVE_X_I18N
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5685 /* Filter events for the current X input method.
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5686 GTK calls XFilterEvent but not for key press and release,
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5687 so we do it here. */
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5688 if (xev->type == KeyPress || xev->type == KeyRelease)
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5689 if (x_filter_event (current_dpyinfo, xev))
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5690 return GDK_FILTER_REMOVE;
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5691 #endif
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5692 current_count += handle_one_xevent (current_dpyinfo,
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5693 xev,
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5694 current_bufp,
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5695 current_numcharsp,
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5696 &current_finish);
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5697 }
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5698 else
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5699 current_finish = x_dispatch_event (xev, GDK_DISPLAY ());
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5700
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5701 if (current_finish == X_EVENT_GOTO_OUT || current_finish == X_EVENT_DROP)
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5702 return GDK_FILTER_REMOVE;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5703
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5704 return GDK_FILTER_CONTINUE;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5705 }
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5706 #endif /* USE_GTK */
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5707
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5708
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5709 /* Handles the XEvent EVENT on display DPYINFO.
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
5710
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5711 *FINISH is X_EVENT_GOTO_OUT if caller should stop reading events.
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5712 *FINISH is zero if caller should continue reading events.
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5713 *FINISH is X_EVENT_DROP if event should not be passed to the toolkit.
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5714
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5715 Events representing keys are stored in buffer *BUFP_R,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5716 which can hold up to *NUMCHARSP characters.
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5717 We return the number of characters stored into the buffer. */
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
5718
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5719 static int
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5720 handle_one_xevent (dpyinfo, eventp, bufp_r, numcharsp, finish)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5721 struct x_display_info *dpyinfo;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5722 XEvent *eventp;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5723 /* register */ struct input_event **bufp_r;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5724 /* register */ int *numcharsp;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5725 int *finish;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5726 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5727 int count = 0;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5728 int nbytes = 0;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5729 struct frame *f;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5730 struct coding_system coding;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5731 struct input_event *bufp = *bufp_r;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5732 int numchars = *numcharsp;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5733 XEvent event = *eventp;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5734
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5735 *finish = X_EVENT_NORMAL;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
5736
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5737 switch (event.type)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5738 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5739 case ClientMessage:
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5740 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5741 if (event.xclient.message_type
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5742 == dpyinfo->Xatom_wm_protocols
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5743 && event.xclient.format == 32)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5744 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5745 if (event.xclient.data.l[0]
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5746 == dpyinfo->Xatom_wm_take_focus)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5747 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5748 /* Use x_any_window_to_frame because this
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5749 could be the shell widget window
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5750 if the frame has no title bar. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5751 f = x_any_window_to_frame (dpyinfo, event.xclient.window);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5752 #ifdef HAVE_X_I18N
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5753 /* Not quite sure this is needed -pd */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5754 if (f && FRAME_XIC (f))
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5755 XSetICFocus (FRAME_XIC (f));
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5756 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5757 #if 0 /* Emacs sets WM hints whose `input' field is `true'. This
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5758 instructs the WM to set the input focus automatically for
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5759 Emacs with a call to XSetInputFocus. Setting WM_TAKE_FOCUS
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5760 tells the WM to send us a ClientMessage WM_TAKE_FOCUS after
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5761 it has set the focus. So, XSetInputFocus below is not
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5762 needed.
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5763
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5764 The call to XSetInputFocus below has also caused trouble. In
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5765 cases where the XSetInputFocus done by the WM and the one
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5766 below are temporally close (on a fast machine), the call
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5767 below can generate additional FocusIn events which confuse
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5768 Emacs. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5769
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5770 /* Since we set WM_TAKE_FOCUS, we must call
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5771 XSetInputFocus explicitly. But not if f is null,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5772 since that might be an event for a deleted frame. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5773 if (f)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5774 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5775 Display *d = event.xclient.display;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5776 /* Catch and ignore errors, in case window has been
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5777 iconified by a window manager such as GWM. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5778 int count = x_catch_errors (d);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5779 XSetInputFocus (d, event.xclient.window,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5780 /* The ICCCM says this is
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5781 the only valid choice. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5782 RevertToParent,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5783 event.xclient.data.l[1]);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5784 /* This is needed to detect the error
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5785 if there is an error. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5786 XSync (d, False);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5787 x_uncatch_errors (d, count);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5788 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5789 /* Not certain about handling scroll bars here */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5790 #endif /* 0 */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5791 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5792 else if (event.xclient.data.l[0]
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5793 == dpyinfo->Xatom_wm_save_yourself)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5794 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5795 /* Save state modify the WM_COMMAND property to
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5796 something which can reinstate us. This notifies
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5797 the session manager, who's looking for such a
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5798 PropertyNotify. Can restart processing when
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5799 a keyboard or mouse event arrives. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5800 /* If we have a session manager, don't set this.
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5801 KDE will then start two Emacsen, one for the
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5802 session manager and one for this. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5803 if (numchars > 0
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5804 #ifdef HAVE_X_SM
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5805 && ! x_session_have_connection ()
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5806 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5807 )
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5808 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5809 f = x_top_window_to_frame (dpyinfo,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5810 event.xclient.window);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5811 /* This is just so we only give real data once
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5812 for a single Emacs process. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5813 if (f == SELECTED_FRAME ())
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5814 XSetCommand (FRAME_X_DISPLAY (f),
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5815 event.xclient.window,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5816 initial_argv, initial_argc);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5817 else if (f)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5818 XSetCommand (FRAME_X_DISPLAY (f),
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5819 event.xclient.window,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5820 0, 0);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5821 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5822 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5823 else if (event.xclient.data.l[0]
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5824 == dpyinfo->Xatom_wm_delete_window)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5825 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5826 struct frame *f
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5827 = x_any_window_to_frame (dpyinfo,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5828 event.xclient.window);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5829
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5830 if (f)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5831 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5832 if (numchars == 0)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5833 abort ();
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5834
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5835 bufp->kind = DELETE_WINDOW_EVENT;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5836 XSETFRAME (bufp->frame_or_window, f);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5837 bufp->arg = Qnil;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5838 bufp++;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5839
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5840 count += 1;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5841 numchars -= 1;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5842 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5843 else
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5844 goto OTHER; /* May be a dialog that is to be removed */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5845 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5846 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5847 else if (event.xclient.message_type
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5848 == dpyinfo->Xatom_wm_configure_denied)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5849 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5850 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5851 else if (event.xclient.message_type
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5852 == dpyinfo->Xatom_wm_window_moved)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5853 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5854 int new_x, new_y;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5855 struct frame *f
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5856 = x_window_to_frame (dpyinfo, event.xclient.window);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5857
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5858 new_x = event.xclient.data.s[0];
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5859 new_y = event.xclient.data.s[1];
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5860
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5861 if (f)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5862 {
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
5863 f->left_pos = new_x;
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
5864 f->top_pos = new_y;
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5865 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5866 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5867 #ifdef HACK_EDITRES
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5868 else if (event.xclient.message_type
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5869 == dpyinfo->Xatom_editres)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5870 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5871 struct frame *f
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5872 = x_any_window_to_frame (dpyinfo, event.xclient.window);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5873 _XEditResCheckMessages (f->output_data.x->widget, NULL,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5874 &event, NULL);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5875 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5876 #endif /* HACK_EDITRES */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5877 else if ((event.xclient.message_type
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5878 == dpyinfo->Xatom_DONE)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5879 || (event.xclient.message_type
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5880 == dpyinfo->Xatom_PAGE))
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5881 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5882 /* Ghostview job completed. Kill it. We could
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5883 reply with "Next" if we received "Page", but we
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5884 currently never do because we are interested in
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5885 images, only, which should have 1 page. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5886 Pixmap pixmap = (Pixmap) event.xclient.data.l[1];
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5887 struct frame *f
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5888 = x_window_to_frame (dpyinfo, event.xclient.window);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5889 x_kill_gs_process (pixmap, f);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5890 expose_frame (f, 0, 0, 0, 0);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5891 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5892 #ifdef USE_TOOLKIT_SCROLL_BARS
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5893 /* Scroll bar callbacks send a ClientMessage from which
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5894 we construct an input_event. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5895 else if (event.xclient.message_type
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5896 == dpyinfo->Xatom_Scrollbar)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5897 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5898 x_scroll_bar_to_input_event (&event, bufp);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5899 ++bufp, ++count, --numchars;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5900 goto out;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5901 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5902 #endif /* USE_TOOLKIT_SCROLL_BARS */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5903 else
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5904 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5905 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5906 break;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5907
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5908 case SelectionNotify:
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5909 #ifdef USE_X_TOOLKIT
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5910 if (! x_window_to_frame (dpyinfo, event.xselection.requestor))
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5911 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5912 #endif /* not USE_X_TOOLKIT */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5913 x_handle_selection_notify (&event.xselection);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5914 break;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5915
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5916 case SelectionClear: /* Someone has grabbed ownership. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5917 #ifdef USE_X_TOOLKIT
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5918 if (! x_window_to_frame (dpyinfo, event.xselectionclear.window))
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5919 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5920 #endif /* USE_X_TOOLKIT */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5921 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5922 XSelectionClearEvent *eventp = (XSelectionClearEvent *) &event;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5923
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5924 if (numchars == 0)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5925 abort ();
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5926
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5927 bufp->kind = SELECTION_CLEAR_EVENT;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5928 SELECTION_EVENT_DISPLAY (bufp) = eventp->display;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5929 SELECTION_EVENT_SELECTION (bufp) = eventp->selection;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5930 SELECTION_EVENT_TIME (bufp) = eventp->time;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5931 bufp->frame_or_window = Qnil;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5932 bufp->arg = Qnil;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5933 bufp++;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5934
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5935 count += 1;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5936 numchars -= 1;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5937 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5938 break;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5939
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5940 case SelectionRequest: /* Someone wants our selection. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5941 #ifdef USE_X_TOOLKIT
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5942 if (!x_window_to_frame (dpyinfo, event.xselectionrequest.owner))
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5943 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5944 #endif /* USE_X_TOOLKIT */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5945 if (x_queue_selection_requests)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5946 x_queue_event (x_window_to_frame (dpyinfo, event.xselectionrequest.owner),
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5947 &event);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5948 else
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5949 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5950 XSelectionRequestEvent *eventp
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5951 = (XSelectionRequestEvent *) &event;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5952
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5953 if (numchars == 0)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5954 abort ();
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5955
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5956 bufp->kind = SELECTION_REQUEST_EVENT;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5957 SELECTION_EVENT_DISPLAY (bufp) = eventp->display;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5958 SELECTION_EVENT_REQUESTOR (bufp) = eventp->requestor;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5959 SELECTION_EVENT_SELECTION (bufp) = eventp->selection;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5960 SELECTION_EVENT_TARGET (bufp) = eventp->target;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5961 SELECTION_EVENT_PROPERTY (bufp) = eventp->property;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5962 SELECTION_EVENT_TIME (bufp) = eventp->time;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5963 bufp->frame_or_window = Qnil;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5964 bufp->arg = Qnil;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5965 bufp++;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5966
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5967 count += 1;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5968 numchars -= 1;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5969 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5970 break;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5971
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5972 case PropertyNotify:
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5973 #if 0 /* This is plain wrong. In the case that we are waiting for a
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5974 PropertyNotify used as an ACK in incremental selection
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5975 transfer, the property will be on the receiver's window. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5976 #if defined USE_X_TOOLKIT
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5977 if (!x_any_window_to_frame (dpyinfo, event.xproperty.window))
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5978 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5979 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5980 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5981 x_handle_property_notify (&event.xproperty);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5982 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5983
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5984 case ReparentNotify:
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5985 f = x_top_window_to_frame (dpyinfo, event.xreparent.window);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5986 if (f)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5987 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5988 int x, y;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5989 f->output_data.x->parent_desc = event.xreparent.parent;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5990 x_real_positions (f, &x, &y);
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
5991 f->left_pos = x;
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
5992 f->top_pos = y;
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5993 }
50056
7933b5de384c * xterm.c (handle_one_xevent): Pass ReparentNotify to Xt even if
Jan Djärv <jan.h.d@swipnet.se>
parents: 50021
diff changeset
5994 goto OTHER;
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5995 break;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5996
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5997 case Expose:
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5998 f = x_window_to_frame (dpyinfo, event.xexpose.window);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5999 if (f)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6000 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6001 x_check_fullscreen (f);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6002
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6003 if (f->async_visible == 0)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6004 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6005 f->async_visible = 1;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6006 f->async_iconified = 0;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6007 f->output_data.x->has_been_visible = 1;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6008 SET_FRAME_GARBAGED (f);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6009 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6010 else
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6011 expose_frame (f,
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6012 event.xexpose.x, event.xexpose.y,
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6013 event.xexpose.width, event.xexpose.height);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6014 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6015 else
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6016 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6017 #ifndef USE_TOOLKIT_SCROLL_BARS
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6018 struct scroll_bar *bar;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6019 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6020 #if defined USE_LUCID
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6021 /* Submenus of the Lucid menu bar aren't widgets
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6022 themselves, so there's no way to dispatch events
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6023 to them. Recognize this case separately. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6024 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6025 Widget widget
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6026 = x_window_to_menu_bar (event.xexpose.window);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6027 if (widget)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6028 xlwmenu_redisplay (widget);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6029 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6030 #endif /* USE_LUCID */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6031
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6032 #ifdef USE_TOOLKIT_SCROLL_BARS
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6033 /* Dispatch event to the widget. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6034 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6035 #else /* not USE_TOOLKIT_SCROLL_BARS */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6036 bar = x_window_to_scroll_bar (event.xexpose.window);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6037
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6038 if (bar)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6039 x_scroll_bar_expose (bar, &event);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6040 #ifdef USE_X_TOOLKIT
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6041 else
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6042 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6043 #endif /* USE_X_TOOLKIT */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6044 #endif /* not USE_TOOLKIT_SCROLL_BARS */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6045 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6046 break;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6047
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6048 case GraphicsExpose: /* This occurs when an XCopyArea's
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6049 source area was obscured or not
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6050 available. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6051 f = x_window_to_frame (dpyinfo, event.xgraphicsexpose.drawable);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6052 if (f)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6053 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6054 expose_frame (f,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6055 event.xgraphicsexpose.x, event.xgraphicsexpose.y,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6056 event.xgraphicsexpose.width,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6057 event.xgraphicsexpose.height);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6058 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6059 #ifdef USE_X_TOOLKIT
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6060 else
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6061 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6062 #endif /* USE_X_TOOLKIT */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6063 break;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6064
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6065 case NoExpose: /* This occurs when an XCopyArea's
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6066 source area was completely
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6067 available. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6068 break;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6069
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6070 case UnmapNotify:
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6071 /* Redo the mouse-highlight after the tooltip has gone. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6072 if (event.xmap.window == tip_window)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6073 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6074 tip_window = 0;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6075 redo_mouse_highlight ();
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6076 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6077
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6078 f = x_top_window_to_frame (dpyinfo, event.xunmap.window);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6079 if (f) /* F may no longer exist if
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6080 the frame was deleted. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6081 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6082 /* While a frame is unmapped, display generation is
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6083 disabled; you don't want to spend time updating a
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6084 display that won't ever be seen. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6085 f->async_visible = 0;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6086 /* We can't distinguish, from the event, whether the window
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6087 has become iconified or invisible. So assume, if it
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6088 was previously visible, than now it is iconified.
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6089 But x_make_frame_invisible clears both
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6090 the visible flag and the iconified flag;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6091 and that way, we know the window is not iconified now. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6092 if (FRAME_VISIBLE_P (f) || FRAME_ICONIFIED_P (f))
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6093 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6094 f->async_iconified = 1;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6095
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6096 bufp->kind = ICONIFY_EVENT;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6097 XSETFRAME (bufp->frame_or_window, f);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6098 bufp->arg = Qnil;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6099 bufp++;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6100 count++;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6101 numchars--;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6102 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6103 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6104 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6105
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6106 case MapNotify:
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6107 if (event.xmap.window == tip_window)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6108 /* The tooltip has been drawn already. Avoid
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6109 the SET_FRAME_GARBAGED below. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6110 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6111
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6112 /* We use x_top_window_to_frame because map events can
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6113 come for sub-windows and they don't mean that the
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6114 frame is visible. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6115 f = x_top_window_to_frame (dpyinfo, event.xmap.window);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6116 if (f)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6117 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6118 /* wait_reading_process_input will notice this and update
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6119 the frame's display structures.
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6120 If we where iconified, we should not set garbaged,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6121 because that stops redrawing on Expose events. This looks
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6122 bad if we are called from a recursive event loop
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6123 (x_dispatch_event), for example when a dialog is up. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6124 if (! f->async_iconified)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6125 SET_FRAME_GARBAGED (f);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6126
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6127 f->async_visible = 1;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6128 f->async_iconified = 0;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6129 f->output_data.x->has_been_visible = 1;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6130
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6131 if (f->iconified)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6132 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6133 bufp->kind = DEICONIFY_EVENT;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6134 XSETFRAME (bufp->frame_or_window, f);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6135 bufp->arg = Qnil;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6136 bufp++;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6137 count++;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6138 numchars--;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6139 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6140 else if (! NILP (Vframe_list)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6141 && ! NILP (XCDR (Vframe_list)))
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6142 /* Force a redisplay sooner or later
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6143 to update the frame titles
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6144 in case this is the second frame. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6145 record_asynch_buffer_change ();
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6146 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6147 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6148
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6149 case KeyPress:
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6150
49326
f5372eee5041 *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49322
diff changeset
6151 #if defined (USE_X_TOOLKIT) || defined (USE_GTK)
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6152 /* Dispatch KeyPress events when in menu. */
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6153 if (popup_activated ())
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6154 goto OTHER;
49326
f5372eee5041 *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49322
diff changeset
6155 #endif
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6156
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6157 f = x_any_window_to_frame (dpyinfo, event.xkey.window);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6158
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6159 if (!dpyinfo->mouse_face_hidden && INTEGERP (Vmouse_highlight))
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6160 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6161 dpyinfo->mouse_face_hidden = 1;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6162 clear_mouse_face (dpyinfo);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6163 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6164
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6165 #if defined USE_MOTIF && defined USE_TOOLKIT_SCROLL_BARS
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6166 if (f == 0)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6167 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6168 /* Scroll bars consume key events, but we want
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6169 the keys to go to the scroll bar's frame. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6170 Widget widget = XtWindowToWidget (dpyinfo->display,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6171 event.xkey.window);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6172 if (widget && XmIsScrollBar (widget))
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6173 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6174 widget = XtParent (widget);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6175 f = x_any_window_to_frame (dpyinfo, XtWindow (widget));
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6176 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6177 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6178 #endif /* USE_MOTIF and USE_TOOLKIT_SCROLL_BARS */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6179
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6180 if (f != 0)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6181 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6182 KeySym keysym, orig_keysym;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6183 /* al%imercury@uunet.uu.net says that making this 81
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6184 instead of 80 fixed a bug whereby meta chars made
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6185 his Emacs hang.
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6186
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6187 It seems that some version of XmbLookupString has
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6188 a bug of not returning XBufferOverflow in
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6189 status_return even if the input is too long to
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6190 fit in 81 bytes. So, we must prepare sufficient
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6191 bytes for copy_buffer. 513 bytes (256 chars for
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6192 two-byte character set) seems to be a fairly good
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6193 approximation. -- 2000.8.10 handa@etl.go.jp */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6194 unsigned char copy_buffer[513];
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6195 unsigned char *copy_bufptr = copy_buffer;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6196 int copy_bufsiz = sizeof (copy_buffer);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6197 int modifiers;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6198 Lisp_Object coding_system = Qlatin_1;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6199
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6200 event.xkey.state
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6201 |= x_emacs_to_x_modifiers (FRAME_X_DISPLAY_INFO (f),
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6202 extra_keyboard_modifiers);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6203 modifiers = event.xkey.state;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6204
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6205 /* This will have to go some day... */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6206
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6207 /* make_lispy_event turns chars into control chars.
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6208 Don't do it here because XLookupString is too eager. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6209 event.xkey.state &= ~ControlMask;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6210 event.xkey.state &= ~(dpyinfo->meta_mod_mask
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6211 | dpyinfo->super_mod_mask
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6212 | dpyinfo->hyper_mod_mask
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6213 | dpyinfo->alt_mod_mask);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6214
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6215 /* In case Meta is ComposeCharacter,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6216 clear its status. According to Markus Ehrnsperger
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6217 Markus.Ehrnsperger@lehrstuhl-bross.physik.uni-muenchen.de
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6218 this enables ComposeCharacter to work whether or
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6219 not it is combined with Meta. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6220 if (modifiers & dpyinfo->meta_mod_mask)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6221 bzero (&compose_status, sizeof (compose_status));
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6222
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6223 #ifdef HAVE_X_I18N
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6224 if (FRAME_XIC (f))
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6225 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6226 Status status_return;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6227
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6228 coding_system = Vlocale_coding_system;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6229 nbytes = XmbLookupString (FRAME_XIC (f),
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6230 &event.xkey, copy_bufptr,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6231 copy_bufsiz, &keysym,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6232 &status_return);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6233 if (status_return == XBufferOverflow)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6234 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6235 copy_bufsiz = nbytes + 1;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6236 copy_bufptr = (char *) alloca (copy_bufsiz);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6237 nbytes = XmbLookupString (FRAME_XIC (f),
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6238 &event.xkey, copy_bufptr,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6239 copy_bufsiz, &keysym,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6240 &status_return);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6241 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6242 /* Xutf8LookupString is a new but already deprecated interface. -stef */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6243 #if 0 && defined X_HAVE_UTF8_STRING
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6244 else if (status_return == XLookupKeySym)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6245 { /* Try again but with utf-8. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6246 coding_system = Qutf_8;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6247 nbytes = Xutf8LookupString (FRAME_XIC (f),
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6248 &event.xkey, copy_bufptr,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6249 copy_bufsiz, &keysym,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6250 &status_return);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6251 if (status_return == XBufferOverflow)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6252 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6253 copy_bufsiz = nbytes + 1;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6254 copy_bufptr = (char *) alloca (copy_bufsiz);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6255 nbytes = Xutf8LookupString (FRAME_XIC (f),
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6256 &event.xkey,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6257 copy_bufptr,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6258 copy_bufsiz, &keysym,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6259 &status_return);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6260 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6261 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6262 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6263
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6264 if (status_return == XLookupNone)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6265 break;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6266 else if (status_return == XLookupChars)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6267 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6268 keysym = NoSymbol;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6269 modifiers = 0;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6270 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6271 else if (status_return != XLookupKeySym
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6272 && status_return != XLookupBoth)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6273 abort ();
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6274 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6275 else
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6276 nbytes = XLookupString (&event.xkey, copy_bufptr,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6277 copy_bufsiz, &keysym,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6278 &compose_status);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6279 #else
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6280 nbytes = XLookupString (&event.xkey, copy_bufptr,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6281 copy_bufsiz, &keysym,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6282 &compose_status);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6283 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6284
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6285 orig_keysym = keysym;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6286
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6287 if (numchars > 1)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6288 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6289 Lisp_Object c;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6290
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6291 /* First deal with keysyms which have defined
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6292 translations to characters. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6293 if (keysym >= 32 && keysym < 128)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6294 /* Avoid explicitly decoding each ASCII character. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6295 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6296 bufp->kind = ASCII_KEYSTROKE_EVENT;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6297 bufp->code = keysym;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6298 XSETFRAME (bufp->frame_or_window, f);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6299 bufp->arg = Qnil;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6300 bufp->modifiers
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6301 = x_x_to_emacs_modifiers (FRAME_X_DISPLAY_INFO (f),
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6302 modifiers);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6303 bufp->timestamp = event.xkey.time;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6304 bufp++;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6305 count++;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6306 numchars--;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6307 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6308 /* Now non-ASCII. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6309 else if (HASH_TABLE_P (Vx_keysym_table)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6310 && (NATNUMP (c = Fgethash (make_number (keysym),
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6311 Vx_keysym_table,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6312 Qnil))))
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6313 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6314 bufp->kind = (SINGLE_BYTE_CHAR_P (XFASTINT (c))
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6315 ? ASCII_KEYSTROKE_EVENT
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6316 : MULTIBYTE_CHAR_KEYSTROKE_EVENT);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6317 bufp->code = XFASTINT (c);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6318 XSETFRAME (bufp->frame_or_window, f);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6319 bufp->arg = Qnil;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6320 bufp->modifiers
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6321 = x_x_to_emacs_modifiers (FRAME_X_DISPLAY_INFO (f),
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6322 modifiers);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6323 bufp->timestamp = event.xkey.time;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6324 bufp++;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6325 count++;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6326 numchars--;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6327 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6328 /* Random non-modifier sorts of keysyms. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6329 else if (((keysym >= XK_BackSpace && keysym <= XK_Escape)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6330 || keysym == XK_Delete
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6331 #ifdef XK_ISO_Left_Tab
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6332 || (keysym >= XK_ISO_Left_Tab
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6333 && keysym <= XK_ISO_Enter)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6334 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6335 || IsCursorKey (keysym) /* 0xff50 <= x < 0xff60 */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6336 || IsMiscFunctionKey (keysym) /* 0xff60 <= x < VARIES */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6337 #ifdef HPUX
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6338 /* This recognizes the "extended function
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6339 keys". It seems there's no cleaner way.
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6340 Test IsModifierKey to avoid handling
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6341 mode_switch incorrectly. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6342 || ((unsigned) (keysym) >= XK_Select
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6343 && (unsigned)(keysym) < XK_KP_Space)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6344 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6345 #ifdef XK_dead_circumflex
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6346 || orig_keysym == XK_dead_circumflex
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6347 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6348 #ifdef XK_dead_grave
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6349 || orig_keysym == XK_dead_grave
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6350 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6351 #ifdef XK_dead_tilde
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6352 || orig_keysym == XK_dead_tilde
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6353 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6354 #ifdef XK_dead_diaeresis
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6355 || orig_keysym == XK_dead_diaeresis
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6356 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6357 #ifdef XK_dead_macron
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6358 || orig_keysym == XK_dead_macron
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6359 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6360 #ifdef XK_dead_degree
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6361 || orig_keysym == XK_dead_degree
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6362 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6363 #ifdef XK_dead_acute
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6364 || orig_keysym == XK_dead_acute
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6365 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6366 #ifdef XK_dead_cedilla
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6367 || orig_keysym == XK_dead_cedilla
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6368 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6369 #ifdef XK_dead_breve
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6370 || orig_keysym == XK_dead_breve
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6371 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6372 #ifdef XK_dead_ogonek
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6373 || orig_keysym == XK_dead_ogonek
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6374 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6375 #ifdef XK_dead_caron
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6376 || orig_keysym == XK_dead_caron
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6377 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6378 #ifdef XK_dead_doubleacute
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6379 || orig_keysym == XK_dead_doubleacute
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6380 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6381 #ifdef XK_dead_abovedot
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6382 || orig_keysym == XK_dead_abovedot
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6383 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6384 || IsKeypadKey (keysym) /* 0xff80 <= x < 0xffbe */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6385 || IsFunctionKey (keysym) /* 0xffbe <= x < 0xffe1 */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6386 /* Any "vendor-specific" key is ok. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6387 || (orig_keysym & (1 << 28))
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6388 || (keysym != NoSymbol && nbytes == 0))
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6389 && ! (IsModifierKey (orig_keysym)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6390 #ifndef HAVE_X11R5
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6391 #ifdef XK_Mode_switch
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6392 || ((unsigned)(orig_keysym) == XK_Mode_switch)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6393 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6394 #ifdef XK_Num_Lock
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6395 || ((unsigned)(orig_keysym) == XK_Num_Lock)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6396 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6397 #endif /* not HAVE_X11R5 */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6398 /* The symbols from XK_ISO_Lock
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6399 to XK_ISO_Last_Group_Lock
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6400 don't have real modifiers but
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6401 should be treated similarly to
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6402 Mode_switch by Emacs. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6403 #if defined XK_ISO_Lock && defined XK_ISO_Last_Group_Lock
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6404 || ((unsigned)(orig_keysym)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6405 >= XK_ISO_Lock
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6406 && (unsigned)(orig_keysym)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6407 <= XK_ISO_Last_Group_Lock)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6408 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6409 ))
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6410 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6411 if (temp_index == sizeof temp_buffer / sizeof (short))
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6412 temp_index = 0;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6413 temp_buffer[temp_index++] = keysym;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6414 /* make_lispy_event will convert this to a symbolic
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6415 key. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6416 bufp->kind = NON_ASCII_KEYSTROKE_EVENT;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6417 bufp->code = keysym;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6418 XSETFRAME (bufp->frame_or_window, f);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6419 bufp->arg = Qnil;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6420 bufp->modifiers
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6421 = x_x_to_emacs_modifiers (FRAME_X_DISPLAY_INFO (f),
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6422 modifiers);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6423 bufp->timestamp = event.xkey.time;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6424 bufp++;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6425 count++;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6426 numchars--;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6427 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6428 else if (numchars > nbytes)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6429 { /* Raw bytes, not keysym. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6430 register int i;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6431 register int c;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6432 int nchars, len;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6433
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6434 /* The input should be decoded with `coding_system'
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6435 which depends on which X*LookupString function
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6436 we used just above and the locale. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6437 setup_coding_system (coding_system, &coding);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6438 coding.src_multibyte = 0;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6439 coding.dst_multibyte = 1;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6440 /* The input is converted to events, thus we can't
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6441 handle composition. Anyway, there's no XIM that
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6442 gives us composition information. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6443 coding.composing = COMPOSITION_DISABLED;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6444
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6445 for (i = 0; i < nbytes; i++)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6446 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6447 if (temp_index == (sizeof temp_buffer
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6448 / sizeof (short)))
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6449 temp_index = 0;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6450 temp_buffer[temp_index++] = copy_bufptr[i];
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6451 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6452
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6453 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6454 /* Decode the input data. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6455 int require;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6456 unsigned char *p;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6457
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6458 require = decoding_buffer_size (&coding, nbytes);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6459 p = (unsigned char *) alloca (require);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6460 coding.mode |= CODING_MODE_LAST_BLOCK;
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
6461 /* We explicitly disable composition
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6462 handling because key data should
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6463 not contain any composition
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6464 sequence. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6465 coding.composing = COMPOSITION_DISABLED;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6466 decode_coding (&coding, copy_bufptr, p,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6467 nbytes, require);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6468 nbytes = coding.produced;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6469 nchars = coding.produced_char;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6470 copy_bufptr = p;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6471 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6472
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6473 /* Convert the input data to a sequence of
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6474 character events. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6475 for (i = 0; i < nbytes; i += len)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6476 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6477 if (nchars == nbytes)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6478 c = copy_bufptr[i], len = 1;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6479 else
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6480 c = STRING_CHAR_AND_LENGTH (copy_bufptr + i,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6481 nbytes - i, len);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6482
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6483 bufp->kind = (SINGLE_BYTE_CHAR_P (c)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6484 ? ASCII_KEYSTROKE_EVENT
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6485 : MULTIBYTE_CHAR_KEYSTROKE_EVENT);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6486 bufp->code = c;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6487 XSETFRAME (bufp->frame_or_window, f);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6488 bufp->arg = Qnil;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6489 bufp->modifiers
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6490 = x_x_to_emacs_modifiers (FRAME_X_DISPLAY_INFO (f),
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6491 modifiers);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6492 bufp->timestamp = event.xkey.time;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6493 bufp++;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6494 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6495
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6496 count += nchars;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6497 numchars -= nchars;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6498
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6499 if (keysym == NoSymbol)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6500 break;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6501 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6502 else
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6503 abort ();
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6504 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6505 else
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6506 abort ();
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6507 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6508 #ifdef HAVE_X_I18N
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6509 /* Don't dispatch this event since XtDispatchEvent calls
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6510 XFilterEvent, and two calls in a row may freeze the
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6511 client. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6512 break;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6513 #else
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6514 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6515 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6516
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6517 case KeyRelease:
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6518 #ifdef HAVE_X_I18N
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6519 /* Don't dispatch this event since XtDispatchEvent calls
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6520 XFilterEvent, and two calls in a row may freeze the
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6521 client. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6522 break;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6523 #else
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6524 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6525 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6526
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6527 case EnterNotify:
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6528 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6529 int n;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6530
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6531 n = x_detect_focus_change (dpyinfo, &event, bufp, numchars);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6532 if (n > 0)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6533 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6534 bufp += n, count += n, numchars -= n;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6535 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6536
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6537 f = x_any_window_to_frame (dpyinfo, event.xcrossing.window);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6538
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6539 #if 0
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6540 if (event.xcrossing.focus)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6541 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6542 /* Avoid nasty pop/raise loops. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6543 if (f && (!(f->auto_raise)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6544 || !(f->auto_lower)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6545 || (event.xcrossing.time - enter_timestamp) > 500))
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6546 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6547 x_new_focus_frame (dpyinfo, f);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6548 enter_timestamp = event.xcrossing.time;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6549 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6550 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6551 else if (f == dpyinfo->x_focus_frame)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6552 x_new_focus_frame (dpyinfo, 0);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6553 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6554
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6555 /* EnterNotify counts as mouse movement,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6556 so update things that depend on mouse position. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6557 if (f && !f->output_data.x->hourglass_p)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6558 note_mouse_movement (f, &event.xmotion);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6559 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6560 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6561
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6562 case FocusIn:
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6563 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6564 int n;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6565
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6566 n = x_detect_focus_change (dpyinfo, &event, bufp, numchars);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6567 if (n > 0)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6568 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6569 bufp += n, count += n, numchars -= n;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6570 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6571 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6572
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6573 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6574
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6575 case LeaveNotify:
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6576 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6577 int n;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6578
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6579 n = x_detect_focus_change (dpyinfo, &event, bufp, numchars);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6580 if (n > 0)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6581 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6582 bufp += n, count += n, numchars -= n;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6583 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6584 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6585
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6586 f = x_top_window_to_frame (dpyinfo, event.xcrossing.window);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6587 if (f)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6588 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6589 if (f == dpyinfo->mouse_face_mouse_frame)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6590 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6591 /* If we move outside the frame, then we're
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6592 certainly no longer on any text in the frame. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6593 clear_mouse_face (dpyinfo);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6594 dpyinfo->mouse_face_mouse_frame = 0;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6595 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6596
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6597 /* Generate a nil HELP_EVENT to cancel a help-echo.
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6598 Do it only if there's something to cancel.
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6599 Otherwise, the startup message is cleared when
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6600 the mouse leaves the frame. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6601 if (any_help_event_p)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6602 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6603 Lisp_Object frame;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6604 int n;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6605
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6606 XSETFRAME (frame, f);
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
6607 help_echo_string = Qnil;
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6608 n = gen_help_event (bufp, numchars,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6609 Qnil, frame, Qnil, Qnil, 0);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6610 bufp += n, count += n, numchars -= n;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6611 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6612
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6613 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6614 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6615
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6616 case FocusOut:
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6617 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6618 int n;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6619
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6620 n = x_detect_focus_change (dpyinfo, &event, bufp, numchars);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6621 if (n > 0)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6622 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6623 bufp += n, count += n, numchars -= n;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6624 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6625 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6626
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6627 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6628
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6629 case MotionNotify:
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6630 {
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
6631 previous_help_echo_string = help_echo_string;
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
6632 help_echo_string = help_echo_object = help_echo_window = Qnil;
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6633 help_echo_pos = -1;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6634
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6635 if (dpyinfo->grabbed && last_mouse_frame
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6636 && FRAME_LIVE_P (last_mouse_frame))
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6637 f = last_mouse_frame;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6638 else
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6639 f = x_window_to_frame (dpyinfo, event.xmotion.window);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6640
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6641 if (dpyinfo->mouse_face_hidden)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6642 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6643 dpyinfo->mouse_face_hidden = 0;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6644 clear_mouse_face (dpyinfo);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6645 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6646
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6647 if (f)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6648 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6649
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6650 /* Generate SELECT_WINDOW_EVENTs when needed. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6651 if (mouse_autoselect_window)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6652 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6653 Lisp_Object window;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6654
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6655 window = window_from_coordinates (f,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6656 event.xmotion.x, event.xmotion.y,
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6657 0, 0, 0, 0);
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6658
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6659 /* Window will be selected only when it is not selected now and
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6660 last mouse movement event was not in it. Minibuffer window
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6661 will be selected iff it is active. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6662 if (WINDOWP(window)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6663 && !EQ (window, last_window)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6664 && !EQ (window, selected_window)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6665 && numchars > 0)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6666 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6667 bufp->kind = SELECT_WINDOW_EVENT;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6668 bufp->frame_or_window = window;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6669 bufp->arg = Qnil;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6670 ++bufp, ++count, --numchars;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6671 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6672
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6673 last_window=window;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6674 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6675 note_mouse_movement (f, &event.xmotion);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6676 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6677 else
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6678 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6679 #ifndef USE_TOOLKIT_SCROLL_BARS
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6680 struct scroll_bar *bar
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6681 = x_window_to_scroll_bar (event.xmotion.window);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6682
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6683 if (bar)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6684 x_scroll_bar_note_movement (bar, &event);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6685 #endif /* USE_TOOLKIT_SCROLL_BARS */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6686
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6687 /* If we move outside the frame, then we're
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6688 certainly no longer on any text in the frame. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6689 clear_mouse_face (dpyinfo);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6690 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6691
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
6692 /* If the contents of the global variable help_echo_string
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6693 has changed, generate a HELP_EVENT. */
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
6694 if (!NILP (help_echo_string)
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
6695 || !NILP (previous_help_echo_string))
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6696 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6697 Lisp_Object frame;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6698 int n;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6699
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6700 if (f)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6701 XSETFRAME (frame, f);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6702 else
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6703 frame = Qnil;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6704
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6705 any_help_event_p = 1;
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
6706 n = gen_help_event (bufp, numchars, help_echo_string, frame,
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6707 help_echo_window, help_echo_object,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6708 help_echo_pos);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6709 bufp += n, count += n, numchars -= n;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6710 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6711
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6712 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6713 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6714
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6715 case ConfigureNotify:
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6716 f = x_top_window_to_frame (dpyinfo, event.xconfigure.window);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6717 if (f)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6718 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6719 #ifndef USE_X_TOOLKIT
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6720 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6721 xg_resize_widgets (f, event.xconfigure.width,
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6722 event.xconfigure.height);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6723 #else /* not USE_GTK */
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6724 /* If there is a pending resize for fullscreen, don't
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6725 do this one, the right one will come later.
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6726 The toolkit version doesn't seem to need this, but we
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6727 need to reset it below. */
51897
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
6728 int dont_resize
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6729 = ((f->want_fullscreen & FULLSCREEN_WAIT)
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6730 && f->new_text_cols != 0);
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6731 int rows = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, event.xconfigure.height);
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6732 int columns = FRAME_PIXEL_WIDTH_TO_TEXT_COLS (f, event.xconfigure.width);
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6733
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6734 if (dont_resize)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6735 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6736
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6737 /* In the toolkit version, change_frame_size
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6738 is called by the code that handles resizing
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6739 of the EmacsFrame widget. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6740
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6741 /* Even if the number of character rows and columns has
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6742 not changed, the font size may have changed, so we need
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6743 to check the pixel dimensions as well. */
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6744 if (columns != FRAME_COLS (f)
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6745 || rows != FRAME_LINES (f)
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6746 || event.xconfigure.width != FRAME_PIXEL_WIDTH (f)
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6747 || event.xconfigure.height != FRAME_PIXEL_HEIGHT (f))
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6748 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6749 change_frame_size (f, rows, columns, 0, 1, 0);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6750 SET_FRAME_GARBAGED (f);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6751 cancel_mouse_face (f);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6752 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6753 #endif /* not USE_GTK */
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6754 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6755
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6756 FRAME_PIXEL_WIDTH (f) = event.xconfigure.width;
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6757 FRAME_PIXEL_HEIGHT (f) = event.xconfigure.height;
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6758
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6759 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6760 /* GTK creates windows but doesn't map them.
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6761 Only get real positions and check fullscreen when mapped. */
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6762 if (FRAME_GTK_OUTER_WIDGET (f)
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6763 && GTK_WIDGET_MAPPED (FRAME_GTK_OUTER_WIDGET (f)))
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6764 #endif
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6765 {
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6766 /* What we have now is the position of Emacs's own window.
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6767 Convert that to the position of the window manager window. */
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6768 x_real_positions (f, &f->left_pos, &f->top_pos);
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6769
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6770 x_check_fullscreen_move (f);
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6771 if (f->want_fullscreen & FULLSCREEN_WAIT)
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6772 f->want_fullscreen &= ~(FULLSCREEN_WAIT|FULLSCREEN_BOTH);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6773 }
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6774
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6775 #ifdef HAVE_X_I18N
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6776 if (FRAME_XIC (f) && (FRAME_XIC_STYLE (f) & XIMStatusArea))
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6777 xic_set_statusarea (f);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6778 #endif
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6779
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6780 if (f->output_data.x->parent_desc != FRAME_X_DISPLAY_INFO (f)->root_window)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6781 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6782 /* Since the WM decorations come below top_pos now,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6783 we must put them below top_pos in the future. */
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6784 f->win_gravity = NorthWestGravity;
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6785 x_wm_set_size_hint (f, (long) 0, 0);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6786 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6787 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6788 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6789
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6790 case ButtonRelease:
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6791 case ButtonPress:
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6792 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6793 /* If we decide we want to generate an event to be seen
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6794 by the rest of Emacs, we put it here. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6795 struct input_event emacs_event;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6796 int tool_bar_p = 0;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6797
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6798 emacs_event.kind = NO_EVENT;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6799 bzero (&compose_status, sizeof (compose_status));
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6800
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6801 if (dpyinfo->grabbed
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6802 && last_mouse_frame
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6803 && FRAME_LIVE_P (last_mouse_frame))
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6804 f = last_mouse_frame;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6805 else
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6806 f = x_window_to_frame (dpyinfo, event.xbutton.window);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6807
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6808 if (f)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6809 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6810 /* Is this in the tool-bar? */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6811 if (WINDOWP (f->tool_bar_window)
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6812 && WINDOW_TOTAL_LINES (XWINDOW (f->tool_bar_window)))
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6813 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6814 Lisp_Object window;
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
6815 int x = event.xbutton.x;
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
6816 int y = event.xbutton.y;
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
6817
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6818 window = window_from_coordinates (f, x, y, 0, 0, 0, 1);
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6819 if (EQ (window, f->tool_bar_window))
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6820 {
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
6821 if (event.xbutton.type == ButtonPress)
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
6822 handle_tool_bar_click (f, x, y, 1, 0);
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
6823 else
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
6824 handle_tool_bar_click (f, x, y, 0,
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
6825 x_x_to_emacs_modifiers (dpyinfo,
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
6826 event.xbutton.state));
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
6827 tool_bar_p = 1;
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6828 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6829 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6830
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6831 if (!tool_bar_p)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6832 if (!dpyinfo->x_focus_frame
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6833 || f == dpyinfo->x_focus_frame)
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6834 {
49326
f5372eee5041 *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49322
diff changeset
6835 #if defined (USE_X_TOOLKIT) || defined (USE_GTK)
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6836 if (! popup_activated ())
49326
f5372eee5041 *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49322
diff changeset
6837 #endif
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6838 construct_mouse_click (&emacs_event, &event, f);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6839 }
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6840 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6841 else
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6842 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6843 struct scroll_bar *bar
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6844 = x_window_to_scroll_bar (event.xbutton.window);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6845
50064
40170697bff1 Implement Ctrl-Mouse-2 (split vertically) for toolkit scrollbars
Jan Djärv <jan.h.d@swipnet.se>
parents: 50056
diff changeset
6846 #ifdef USE_TOOLKIT_SCROLL_BARS
40170697bff1 Implement Ctrl-Mouse-2 (split vertically) for toolkit scrollbars
Jan Djärv <jan.h.d@swipnet.se>
parents: 50056
diff changeset
6847 /* Make the "Ctrl-Mouse-2 splits window" work for toolkit
40170697bff1 Implement Ctrl-Mouse-2 (split vertically) for toolkit scrollbars
Jan Djärv <jan.h.d@swipnet.se>
parents: 50056
diff changeset
6848 scroll bars. */
40170697bff1 Implement Ctrl-Mouse-2 (split vertically) for toolkit scrollbars
Jan Djärv <jan.h.d@swipnet.se>
parents: 50056
diff changeset
6849 if (bar && event.xbutton.state & ControlMask)
40170697bff1 Implement Ctrl-Mouse-2 (split vertically) for toolkit scrollbars
Jan Djärv <jan.h.d@swipnet.se>
parents: 50056
diff changeset
6850 {
40170697bff1 Implement Ctrl-Mouse-2 (split vertically) for toolkit scrollbars
Jan Djärv <jan.h.d@swipnet.se>
parents: 50056
diff changeset
6851 x_scroll_bar_handle_click (bar, &event, &emacs_event);
40170697bff1 Implement Ctrl-Mouse-2 (split vertically) for toolkit scrollbars
Jan Djärv <jan.h.d@swipnet.se>
parents: 50056
diff changeset
6852 *finish = X_EVENT_DROP;
40170697bff1 Implement Ctrl-Mouse-2 (split vertically) for toolkit scrollbars
Jan Djärv <jan.h.d@swipnet.se>
parents: 50056
diff changeset
6853 }
40170697bff1 Implement Ctrl-Mouse-2 (split vertically) for toolkit scrollbars
Jan Djärv <jan.h.d@swipnet.se>
parents: 50056
diff changeset
6854 #else /* not USE_TOOLKIT_SCROLL_BARS */
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6855 if (bar)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6856 x_scroll_bar_handle_click (bar, &event, &emacs_event);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6857 #endif /* not USE_TOOLKIT_SCROLL_BARS */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6858 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6859
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6860 if (event.type == ButtonPress)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6861 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6862 dpyinfo->grabbed |= (1 << event.xbutton.button);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6863 last_mouse_frame = f;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6864 /* Ignore any mouse motion that happened
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6865 before this event; any subsequent mouse-movement
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6866 Emacs events should reflect only motion after
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6867 the ButtonPress. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6868 if (f != 0)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6869 f->mouse_moved = 0;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6870
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6871 if (!tool_bar_p)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6872 last_tool_bar_item = -1;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6873 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6874 else
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6875 dpyinfo->grabbed &= ~(1 << event.xbutton.button);
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6876
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6877 if (numchars >= 1 && emacs_event.kind != NO_EVENT)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6878 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6879 bcopy (&emacs_event, bufp, sizeof (struct input_event));
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6880 bufp++;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6881 count++;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6882 numchars--;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6883 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6884
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6885 #if defined (USE_X_TOOLKIT) || defined (USE_GTK)
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6886 f = x_menubar_window_to_frame (dpyinfo, event.xbutton.window);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6887 /* For a down-event in the menu bar,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6888 don't pass it to Xt right now.
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6889 Instead, save it away
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6890 and we will pass it to Xt from kbd_buffer_get_event.
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6891 That way, we can run some Lisp code first. */
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6892 if (
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6893 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6894 ! popup_activated ()
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6895 &&
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6896 #endif
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6897 f && event.type == ButtonPress
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6898 /* Verify the event is really within the menu bar
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6899 and not just sent to it due to grabbing. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6900 && event.xbutton.x >= 0
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6901 && event.xbutton.x < FRAME_PIXEL_WIDTH (f)
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6902 && event.xbutton.y >= 0
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6903 && event.xbutton.y < f->output_data.x->menubar_height
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6904 && event.xbutton.same_screen)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6905 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6906 SET_SAVED_BUTTON_EVENT;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6907 XSETFRAME (last_mouse_press_frame, f);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6908 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6909 *finish = X_EVENT_DROP;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6910 #endif
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6911 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6912 else if (event.type == ButtonPress)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6913 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6914 last_mouse_press_frame = Qnil;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6915 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6916 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6917
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6918 #ifdef USE_MOTIF /* This should do not harm for Lucid,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6919 but I am trying to be cautious. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6920 else if (event.type == ButtonRelease)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6921 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6922 if (!NILP (last_mouse_press_frame))
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6923 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6924 f = XFRAME (last_mouse_press_frame);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6925 if (f->output_data.x)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6926 SET_SAVED_BUTTON_EVENT;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6927 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6928 else
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6929 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6930 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6931 #endif /* USE_MOTIF */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6932 else
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6933 goto OTHER;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6934 #endif /* USE_X_TOOLKIT || USE_GTK */
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6935 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6936 break;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6937
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6938 case CirculateNotify:
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6939 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6940
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6941 case CirculateRequest:
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6942 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6943
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6944 case VisibilityNotify:
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6945 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6946
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6947 case MappingNotify:
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6948 /* Someone has changed the keyboard mapping - update the
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6949 local cache. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6950 switch (event.xmapping.request)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6951 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6952 case MappingModifier:
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6953 x_find_modifier_meanings (dpyinfo);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6954 /* This is meant to fall through. */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6955 case MappingKeyboard:
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6956 XRefreshKeyboardMapping (&event.xmapping);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6957 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6958 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6959
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6960 default:
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6961 OTHER:
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6962 #ifdef USE_X_TOOLKIT
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6963 BLOCK_INPUT;
50064
40170697bff1 Implement Ctrl-Mouse-2 (split vertically) for toolkit scrollbars
Jan Djärv <jan.h.d@swipnet.se>
parents: 50056
diff changeset
6964 if (*finish != X_EVENT_DROP)
40170697bff1 Implement Ctrl-Mouse-2 (split vertically) for toolkit scrollbars
Jan Djärv <jan.h.d@swipnet.se>
parents: 50056
diff changeset
6965 XtDispatchEvent (&event);
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6966 UNBLOCK_INPUT;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6967 #endif /* USE_X_TOOLKIT */
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6968 break;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6969 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6970
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6971 goto ret;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
6972
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6973 out:
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6974 *finish = X_EVENT_GOTO_OUT;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6975
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6976 ret:
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6977 *bufp_r = bufp;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6978 *numcharsp = numchars;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6979 *eventp = event;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
6980
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6981 return count;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6982 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6983
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6984
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6985 /* Handles the XEvent EVENT on display DISPLAY.
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6986 This is used for event loops outside the normal event handling,
49434
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
6987 i.e. looping while a popup menu or a dialog is posted.
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
6988
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
6989 Returns the value handle_one_xevent sets in the finish argument. */
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
6990 int
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6991 x_dispatch_event (event, display)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6992 XEvent *event;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6993 Display *display;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6994 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6995 struct x_display_info *dpyinfo;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6996 struct input_event bufp[10];
51576
df2c9d815bb3 (x_dispatch_event): Don't pass uninitialized
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51405
diff changeset
6997 struct input_event *bufpp;
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6998 int numchars = 10;
49434
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
6999 int finish = X_EVENT_NORMAL;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
7000
51576
df2c9d815bb3 (x_dispatch_event): Don't pass uninitialized
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51405
diff changeset
7001 for (bufpp = bufp; bufpp != bufp + 10; bufpp++)
df2c9d815bb3 (x_dispatch_event): Don't pass uninitialized
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51405
diff changeset
7002 EVENT_INIT (*bufpp);
df2c9d815bb3 (x_dispatch_event): Don't pass uninitialized
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51405
diff changeset
7003 bufpp = bufp;
df2c9d815bb3 (x_dispatch_event): Don't pass uninitialized
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51405
diff changeset
7004
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7005 for (dpyinfo = x_display_list; dpyinfo; dpyinfo = dpyinfo->next)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7006 if (dpyinfo->display == display)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7007 break;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
7008
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7009 if (dpyinfo)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7010 {
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7011 int i, events;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7012 events = handle_one_xevent (dpyinfo,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7013 event,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7014 &bufpp,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7015 &numchars,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7016 &finish);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7017 for (i = 0; i < events; ++i)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7018 kbd_buffer_store_event (&bufp[i]);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7019 }
49434
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
7020
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
7021 return finish;
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7022 }
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7023
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7024
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7025 /* Read events coming from the X server.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7026 This routine is called by the SIGIO handler.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7027 We return as soon as there are no more events to be read.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7028
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7029 Events representing keys are stored in buffer BUFP,
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7030 which can hold up to NUMCHARS characters.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7031 We return the number of characters stored into the buffer,
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7032 thus pretending to be `read'.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7033
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7034 EXPECTED is nonzero if the caller knows input is available. */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7035
43884
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
7036 static int
16330
e4d9d77012bc (XTread_socket): Delete WAITP arg.
Richard M. Stallman <rms@gnu.org>
parents: 16301
diff changeset
7037 XTread_socket (sd, bufp, numchars, expected)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7038 register int sd;
15711
099dc465c948 (SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents: 15639
diff changeset
7039 /* register */ struct input_event *bufp;
099dc465c948 (SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents: 15639
diff changeset
7040 /* register */ int numchars;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7041 int expected;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7042 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7043 int count = 0;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7044 XEvent event;
3938
83d870a52936 * xterm.c (XTread_socket): Initialize event_found to zero, and
Jim Blandy <jimb@redhat.com>
parents: 3924
diff changeset
7045 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
7046 struct x_display_info *dpyinfo;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7047
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2353
diff changeset
7048 if (interrupt_input_blocked)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7049 {
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2353
diff changeset
7050 interrupt_input_pending = 1;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7051 return -1;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7052 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7053
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2353
diff changeset
7054 interrupt_input_pending = 0;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7055 BLOCK_INPUT;
9337
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
7056
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
7057 /* 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
7058 input_signal_count++;
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
7059
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7060 if (numchars <= 0)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7061 abort (); /* Don't think this happens. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7062
30083
998d20abc885 (XTread_socket): Increment handling_signal at the start,
Gerd Moellmann <gerd@gnu.org>
parents: 30050
diff changeset
7063 ++handling_signal;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7064
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7065 /* 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
7066 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
7067 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
7068 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7069 #if 0 /* This ought to be unnecessary; let's verify it. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7070 #ifdef FIOSNBIO
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7071 /* 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
7072 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
7073 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
7074 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
7075 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
7076 #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
7077 #endif
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7078
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7079 #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
7080 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
7081 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
7082 for X connections. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7083 #ifndef SIGIO
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7084 #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
7085 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
7086 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7087 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
7088 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
7089 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
7090 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
7091 }
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
7092 #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
7093 #endif /* SIGIO */
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7094 #endif
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7095
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7096 /* 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
7097 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
7098 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7099 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
7100 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
7101 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7102
43812
20dbe11a2ad3 Added calls to x_session_check_input () and x_session_initialize ().
Jan Djärv <jan.h.d@swipnet.se>
parents: 43713
diff changeset
7103 #ifdef HAVE_X_SM
20dbe11a2ad3 Added calls to x_session_check_input () and x_session_initialize ().
Jan Djärv <jan.h.d@swipnet.se>
parents: 43713
diff changeset
7104 BLOCK_INPUT;
20dbe11a2ad3 Added calls to x_session_check_input () and x_session_initialize ().
Jan Djärv <jan.h.d@swipnet.se>
parents: 43713
diff changeset
7105 count += x_session_check_input (bufp, &numchars);
20dbe11a2ad3 Added calls to x_session_check_input () and x_session_initialize ().
Jan Djärv <jan.h.d@swipnet.se>
parents: 43713
diff changeset
7106 UNBLOCK_INPUT;
20dbe11a2ad3 Added calls to x_session_check_input () and x_session_initialize ().
Jan Djärv <jan.h.d@swipnet.se>
parents: 43713
diff changeset
7107 #endif
20dbe11a2ad3 Added calls to x_session_check_input () and x_session_initialize ().
Jan Djärv <jan.h.d@swipnet.se>
parents: 43713
diff changeset
7108
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7109 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7110 /* For GTK we must use the GTK event loop. But XEvents gets passed
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7111 to our filter function above, and then to the big event switch.
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7112 We use a bunch of globals to communicate with our filter function,
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7113 that is kind of ugly, but it works. */
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7114 current_dpyinfo = dpyinfo;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
7115
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7116 while (gtk_events_pending ())
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7117 {
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7118 current_count = count;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7119 current_numcharsp = &numchars;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7120 current_bufp = &bufp;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7121
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7122 gtk_main_iteration ();
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7123
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7124 count = current_count;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7125 current_bufp = 0;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7126 current_numcharsp = 0;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7127
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7128 if (current_finish == X_EVENT_GOTO_OUT)
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7129 goto out;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7130 }
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7131
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7132 #else /* not USE_GTK */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7133 while (XPending (dpyinfo->display))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7134 {
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7135 int finish;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
7136
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7137 XNextEvent (dpyinfo->display, &event);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7138
15973
6ad9e8fee494 (XTread_socket): Call XFilterEvent on all events,
Richard M. Stallman <rms@gnu.org>
parents: 15928
diff changeset
7139 #ifdef HAVE_X_I18N
49434
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
7140 /* Filter events for the current X input method. */
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
7141 if (x_filter_event (dpyinfo, &event))
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
7142 break;
15973
6ad9e8fee494 (XTread_socket): Call XFilterEvent on all events,
Richard M. Stallman <rms@gnu.org>
parents: 15928
diff changeset
7143 #endif
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7144 event_found = 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7145
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7146 count += handle_one_xevent (dpyinfo,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7147 &event,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7148 &bufp,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7149 &numchars,
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7150 &finish);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7151
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7152 if (finish == X_EVENT_GOTO_OUT)
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7153 goto out;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7154 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7155 #endif /* USE_GTK */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7156 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7157
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7158 out:;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7159
8485
6e4b40c80021 (XTread_socket): Don't test X_IO_BUG; make that code unconditional.
Richard M. Stallman <rms@gnu.org>
parents: 8437
diff changeset
7160 /* 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
7161 when the window is destroyed. Detect that. (1994.) */
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
7162 if (! event_found)
7916
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
7163 {
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
7164 /* 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
7165 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
7166 B. Bretthauer, 1994 */
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
7167 x_noop_count++;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
7168 if (x_noop_count >= 100)
7916
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
7169 {
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
7170 x_noop_count=0;
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
7171
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
7172 if (next_noop_dpyinfo == 0)
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
7173 next_noop_dpyinfo = x_display_list;
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
7174
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
7175 XNoOp (next_noop_dpyinfo->display);
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
7176
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
7177 /* 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
7178 next_noop_dpyinfo = next_noop_dpyinfo->next;
7916
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
7179 }
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
7180 }
5753
eb44ecad5557 (XTread_socket): Add X_IO_BUG conditional.
Richard M. Stallman <rms@gnu.org>
parents: 5740
diff changeset
7181
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7182 /* 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
7183 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
7184 /* ??? 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
7185 if (pending_autoraise_frame)
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
7186 {
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
7187 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
7188 pending_autoraise_frame = 0;
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
7189 }
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
7190
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7191 UNBLOCK_INPUT;
30083
998d20abc885 (XTread_socket): Increment handling_signal at the start,
Gerd Moellmann <gerd@gnu.org>
parents: 30050
diff changeset
7192 --handling_signal;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7193 return count;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7194 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7195
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7196
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7197
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7198
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7199 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7200 Text Cursor
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7201 ***********************************************************************/
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 /* 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
7204 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
7205
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7206 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
7207 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
7208 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
7209
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7210 static void
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7211 x_clip_to_row (w, row, gc)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7212 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7213 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7214 GC gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7215 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7216 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
7217 XRectangle clip_rect;
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7218 int window_y, window_width;
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7219
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7220 window_box (w, -1, 0, &window_y, &window_width, 0);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7221
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7222 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
7223 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
7224 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
7225 clip_rect.width = window_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7226 clip_rect.height = row->visible_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7227
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7228 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
7229 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7230
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7231
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7232 /* 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
7233
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7234 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7235 x_draw_hollow_cursor (w, row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7236 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7237 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7238 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7239 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
7240 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
7241 Display *dpy = FRAME_X_DISPLAY (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7242 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
7243 XGCValues xgcv;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7244 struct glyph *cursor_glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7245 GC gc;
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 /* 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
7248 coordinates. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7249 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
7250 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
7251 + row->ascent - w->phys_cursor_ascent);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7252 h = row->height - 1;
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 /* 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
7255 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
7256 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
7257 if (cursor_glyph == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7258 return;
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 /* 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
7261 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
7262 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
7263 width instead. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7264 wd = cursor_glyph->pixel_width - 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7265 if (cursor_glyph->type == STRETCH_GLYPH
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7266 && !x_stretch_cursor_p)
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7267 wd = min (FRAME_COLUMN_WIDTH (f), wd);
44774
f2158eb57017 (x_draw_hollow_cursor, x_draw_bar_cursor)
Gerd Moellmann <gerd@gnu.org>
parents: 44763
diff changeset
7268 w->phys_cursor_width = wd;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7269
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7270 /* 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
7271 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
7272 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
7273 if (dpyinfo->scratch_cursor_gc)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7274 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
7275 else
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7276 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
7277 GCForeground, &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7278 gc = dpyinfo->scratch_cursor_gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7279
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7280 /* Set clipping, draw the rectangle, and reset clipping again. */
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7281 x_clip_to_row (w, row, gc);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7282 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
7283 XSetClipMask (dpy, gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7284 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7285
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7286
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7287 /* 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
7288
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7289 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
7290 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
7291 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
7292 --gerd. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7293
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7294 static void
44690
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7295 x_draw_bar_cursor (w, row, width, kind)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7296 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7297 struct glyph_row *row;
28321
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
7298 int width;
44690
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7299 enum text_cursor_kinds kind;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7300 {
30742
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
7301 struct frame *f = XFRAME (w->frame);
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
7302 struct glyph *cursor_glyph;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7303
30742
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
7304 /* If cursor is out of bounds, don't draw garbage. This can happen
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
7305 in mini-buffer windows when switching between echo area glyphs
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
7306 and mini-buffer. */
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
7307 cursor_glyph = get_phys_cursor_glyph (w);
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
7308 if (cursor_glyph == NULL)
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
7309 return;
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
7310
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
7311 /* If on an image, draw like a normal cursor. That's usually better
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
7312 visible than drawing a bar, esp. if the image is large so that
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
7313 the bar might not be in the window. */
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
7314 if (cursor_glyph->type == IMAGE_GLYPH)
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
7315 {
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
7316 struct glyph_row *row;
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
7317 row = MATRIX_ROW (w->current_matrix, w->phys_cursor.vpos);
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7318 draw_phys_cursor_glyph (w, row, DRAW_CURSOR);
30742
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
7319 }
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
7320 else
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
7321 {
41073
3dafa2c81609 (x_draw_bar_cursor): If the background color of the
Gerd Moellmann <gerd@gnu.org>
parents: 40957
diff changeset
7322 Display *dpy = FRAME_X_DISPLAY (f);
3dafa2c81609 (x_draw_bar_cursor): If the background color of the
Gerd Moellmann <gerd@gnu.org>
parents: 40957
diff changeset
7323 Window window = FRAME_X_WINDOW (f);
3dafa2c81609 (x_draw_bar_cursor): If the background color of the
Gerd Moellmann <gerd@gnu.org>
parents: 40957
diff changeset
7324 GC gc = FRAME_X_DISPLAY_INFO (f)->scratch_cursor_gc;
3dafa2c81609 (x_draw_bar_cursor): If the background color of the
Gerd Moellmann <gerd@gnu.org>
parents: 40957
diff changeset
7325 unsigned long mask = GCForeground | GCBackground | GCGraphicsExposures;
3dafa2c81609 (x_draw_bar_cursor): If the background color of the
Gerd Moellmann <gerd@gnu.org>
parents: 40957
diff changeset
7326 struct face *face = FACE_FROM_ID (f, cursor_glyph->face_id);
3dafa2c81609 (x_draw_bar_cursor): If the background color of the
Gerd Moellmann <gerd@gnu.org>
parents: 40957
diff changeset
7327 XGCValues xgcv;
3dafa2c81609 (x_draw_bar_cursor): If the background color of the
Gerd Moellmann <gerd@gnu.org>
parents: 40957
diff changeset
7328
3dafa2c81609 (x_draw_bar_cursor): If the background color of the
Gerd Moellmann <gerd@gnu.org>
parents: 40957
diff changeset
7329 /* If the glyph's background equals the color we normally draw
3dafa2c81609 (x_draw_bar_cursor): If the background color of the
Gerd Moellmann <gerd@gnu.org>
parents: 40957
diff changeset
7330 the bar cursor in, the bar cursor in its normal color is
3dafa2c81609 (x_draw_bar_cursor): If the background color of the
Gerd Moellmann <gerd@gnu.org>
parents: 40957
diff changeset
7331 invisible. Use the glyph's foreground color instead in this
3dafa2c81609 (x_draw_bar_cursor): If the background color of the
Gerd Moellmann <gerd@gnu.org>
parents: 40957
diff changeset
7332 case, on the assumption that the glyph's colors are chosen so
3dafa2c81609 (x_draw_bar_cursor): If the background color of the
Gerd Moellmann <gerd@gnu.org>
parents: 40957
diff changeset
7333 that the glyph is legible. */
3dafa2c81609 (x_draw_bar_cursor): If the background color of the
Gerd Moellmann <gerd@gnu.org>
parents: 40957
diff changeset
7334 if (face->background == f->output_data.x->cursor_pixel)
3dafa2c81609 (x_draw_bar_cursor): If the background color of the
Gerd Moellmann <gerd@gnu.org>
parents: 40957
diff changeset
7335 xgcv.background = xgcv.foreground = face->foreground;
3dafa2c81609 (x_draw_bar_cursor): If the background color of the
Gerd Moellmann <gerd@gnu.org>
parents: 40957
diff changeset
7336 else
3dafa2c81609 (x_draw_bar_cursor): If the background color of the
Gerd Moellmann <gerd@gnu.org>
parents: 40957
diff changeset
7337 xgcv.background = 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
7338 xgcv.graphics_exposures = 0;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7339
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7340 if (gc)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7341 XChangeGC (dpy, gc, mask, &xgcv);
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 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7344 gc = XCreateGC (dpy, window, mask, &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7345 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
7346 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7347
28321
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
7348 if (width < 0)
47143
264271f9ab24 (x_specified_cursor_type): Remove prototype.
Kim F. Storm <storm@cua.dk>
parents: 47057
diff changeset
7349 width = FRAME_CURSOR_WIDTH (f);
41073
3dafa2c81609 (x_draw_bar_cursor): If the background color of the
Gerd Moellmann <gerd@gnu.org>
parents: 40957
diff changeset
7350 width = min (cursor_glyph->pixel_width, width);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7351
44774
f2158eb57017 (x_draw_hollow_cursor, x_draw_bar_cursor)
Gerd Moellmann <gerd@gnu.org>
parents: 44763
diff changeset
7352 w->phys_cursor_width = width;
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7353 x_clip_to_row (w, row, gc);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7354
44690
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7355 if (kind == BAR_CURSOR)
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7356 XFillRectangle (dpy, window, gc,
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7357 WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x),
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7358 WINDOW_TO_FRAME_PIXEL_Y (w, w->phys_cursor.y),
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7359 width, row->height);
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7360 else
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7361 XFillRectangle (dpy, window, gc,
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7362 WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x),
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7363 WINDOW_TO_FRAME_PIXEL_Y (w, w->phys_cursor.y +
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7364 row->height - width),
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7365 cursor_glyph->pixel_width,
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7366 width);
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7367
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7368 XSetClipMask (dpy, gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7369 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7370 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7371
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7372
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7373 /* RIF: Define cursor CURSOR on frame F. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7374
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7375 static void
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7376 x_define_frame_cursor (f, cursor)
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7377 struct frame *f;
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7378 Cursor cursor;
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7379 {
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7380 XDefineCursor (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), cursor);
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7381 }
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7382
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7383
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7384 /* RIF: Clear area on frame F. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7385
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7386 static void
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7387 x_clear_frame_area (f, x, y, width, height)
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7388 struct frame *f;
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7389 int x, y, width, height;
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7390 {
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7391 x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7392 x, y, width, height, False);
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7393 }
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7394
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7395
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7396 /* RIF: Draw cursor on window W. */
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7397
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7398 static void
50243
3fb54e5a7201 (struct redisplay_interface): Add active_p argument to
Kim F. Storm <storm@cua.dk>
parents: 50237
diff changeset
7399 x_draw_window_cursor (w, glyph_row, x, y, cursor_type, cursor_width, on_p, active_p)
37922
fcd11c3e6341 (cursor_in_mouse_face_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37726
diff changeset
7400 struct window *w;
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7401 struct glyph_row *glyph_row;
50243
3fb54e5a7201 (struct redisplay_interface): Add active_p argument to
Kim F. Storm <storm@cua.dk>
parents: 50237
diff changeset
7402 int x, y;
3fb54e5a7201 (struct redisplay_interface): Add active_p argument to
Kim F. Storm <storm@cua.dk>
parents: 50237
diff changeset
7403 int cursor_type, cursor_width;
3fb54e5a7201 (struct redisplay_interface): Add active_p argument to
Kim F. Storm <storm@cua.dk>
parents: 50237
diff changeset
7404 int on_p, active_p;
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7405 {
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7406 struct frame *f = XFRAME (WINDOW_FRAME (w));
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7407
50243
3fb54e5a7201 (struct redisplay_interface): Add active_p argument to
Kim F. Storm <storm@cua.dk>
parents: 50237
diff changeset
7408 if (on_p)
3fb54e5a7201 (struct redisplay_interface): Add active_p argument to
Kim F. Storm <storm@cua.dk>
parents: 50237
diff changeset
7409 {
3fb54e5a7201 (struct redisplay_interface): Add active_p argument to
Kim F. Storm <storm@cua.dk>
parents: 50237
diff changeset
7410 w->phys_cursor_type = cursor_type;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7411 w->phys_cursor_on_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7412
50243
3fb54e5a7201 (struct redisplay_interface): Add active_p argument to
Kim F. Storm <storm@cua.dk>
parents: 50237
diff changeset
7413 switch (cursor_type)
24991
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 case HOLLOW_BOX_CURSOR:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7416 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
7417 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7418
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7419 case FILLED_BOX_CURSOR:
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7420 draw_phys_cursor_glyph (w, glyph_row, DRAW_CURSOR);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7421 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7422
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7423 case BAR_CURSOR:
50243
3fb54e5a7201 (struct redisplay_interface): Add active_p argument to
Kim F. Storm <storm@cua.dk>
parents: 50237
diff changeset
7424 x_draw_bar_cursor (w, glyph_row, cursor_width, BAR_CURSOR);
44690
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7425 break;
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7426
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7427 case HBAR_CURSOR:
50243
3fb54e5a7201 (struct redisplay_interface): Add active_p argument to
Kim F. Storm <storm@cua.dk>
parents: 50237
diff changeset
7428 x_draw_bar_cursor (w, glyph_row, cursor_width, HBAR_CURSOR);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7429 break;
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 case NO_CURSOR:
44814
06d704d7ed94 (x_display_and_set_cursor): Set phys_cursor_width to
Gerd Moellmann <gerd@gnu.org>
parents: 44805
diff changeset
7432 w->phys_cursor_width = 0;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7433 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7434
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7435 default:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7436 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7437 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7438
27619
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
7439 #ifdef HAVE_X_I18N
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
7440 if (w == XWINDOW (f->selected_window))
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
7441 if (FRAME_XIC (f) && (FRAME_XIC_STYLE (f) & XIMPreeditPosition))
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
7442 xic_set_preeditarea (w, x, y);
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
7443 #endif
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7444 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7445
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7446 #ifndef XFlush
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
7447 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
7448 XFlush (FRAME_X_DISPLAY (f));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7449 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7450 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7451
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7452
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7453 /* Icons. */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7454
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
7455 /* Make the x-window of frame F use the gnu icon bitmap. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7456
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7457 int
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
7458 x_bitmap_icon (f, file)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
7459 struct frame *f;
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
7460 Lisp_Object file;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7461 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7462 int bitmap_id;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7463
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
7464 if (FRAME_X_WINDOW (f) == 0)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7465 return 1;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7466
51897
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
7467 /* Free up our existing icon bitmap and mask 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
7468 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
7469 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
7470 f->output_data.x->icon_bitmap = 0;
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
7471
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
7472 if (STRINGP (file))
51897
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
7473 {
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
7474 #ifdef USE_GTK
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
7475 /* Use gtk_window_set_icon_from_file() if available,
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
7476 It's not restricted to bitmaps */
52095
a2208fe45c36 * xfns.c (xg_set_icon): Rewrite to compile with GTK 2.0 and 2.2.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52076
diff changeset
7477 if (xg_set_icon(f, file))
51897
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
7478 return 0;
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
7479 #endif /* USE_GTK */
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
7480 bitmap_id = x_create_bitmap_from_file (f, file);
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
7481 x_create_bitmap_mask(f, bitmap_id);
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
7482 }
9542
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
7483 else
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
7484 {
51897
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
7485 /* Create the GNU bitmap and mask if necessary. */
10755
e5f13cc95d02 (x_bitmap_icon): Fix test for unallocated icon bitmap.
Paul Reilly <pmr@pajato.com>
parents: 10743
diff changeset
7486 if (FRAME_X_DISPLAY_INFO (f)->icon_bitmap_id < 0)
51897
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
7487 {
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
7488 FRAME_X_DISPLAY_INFO (f)->icon_bitmap_id
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
7489 = x_create_bitmap_from_data (f, gnu_bits,
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
7490 gnu_width, gnu_height);
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
7491 x_create_bitmap_mask(f, FRAME_X_DISPLAY_INFO (f)->icon_bitmap_id);
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
7492 }
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
7493
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
7494 /* The first time we create the GNU bitmap and mask,
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7495 this increments the ref-count one extra time.
51897
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
7496 As a result, the GNU bitmap and mask are never freed.
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
7497 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
7498 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
7499
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
7500 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
7501 }
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
7502
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
7503 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
7504 f->output_data.x->icon_bitmap = bitmap_id;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7505
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7506 return 0;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7507 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7508
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7509
12074
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
7510 /* 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
7511 Use ICON_NAME as the text. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7512
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7513 int
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
7514 x_text_icon (f, icon_name)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
7515 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7516 char *icon_name;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7517 {
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
7518 if (FRAME_X_WINDOW (f) == 0)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7519 return 1;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7520
12074
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
7521 #ifdef HAVE_X11R4
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
7522 {
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
7523 XTextProperty text;
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
7524 text.value = (unsigned char *) icon_name;
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
7525 text.encoding = XA_STRING;
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
7526 text.format = 8;
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
7527 text.nitems = strlen (icon_name);
49644
834df49192b0 Use FRAME_OUTER_WINDOW instead of ifdef X_TOOLKIT/else/endif
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
7528 XSetWMIconName (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), &text);
12074
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
7529 }
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
7530 #else /* not HAVE_X11R4 */
49644
834df49192b0 Use FRAME_OUTER_WINDOW instead of ifdef X_TOOLKIT/else/endif
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
7531 XSetIconName (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), icon_name);
12074
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
7532 #endif /* not HAVE_X11R4 */
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
7533
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
7534 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
7535 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
7536 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
7537 x_wm_set_icon_pixmap (f, 0);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7538
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7539 return 0;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7540 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7541
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7542 #define X_ERROR_MESSAGE_SIZE 200
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7543
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7544 /* If non-nil, this should be a string.
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7545 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
7546
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7547 static Lisp_Object x_error_message_string;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7548
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7549 /* 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
7550 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
7551 x_catch_errors is in effect. */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7552
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7553 static void
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7554 x_error_catcher (display, error)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7555 Display *display;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7556 XErrorEvent *error;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7557 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7558 XGetErrorText (display, error->error_code,
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
7559 SDATA (x_error_message_string),
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7560 X_ERROR_MESSAGE_SIZE);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7561 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7562
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7563 /* 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
7564 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
7565 operating on.
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7566
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7567 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
7568 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
7569 stored in x_error_message_string.
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7570
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7571 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
7572 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
7573
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7574 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
7575
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7576 void x_check_errors ();
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7577 static Lisp_Object x_catch_errors_unwind ();
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7578
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7579 int
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7580 x_catch_errors (dpy)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7581 Display *dpy;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7582 {
46293
1fb8f75062c6 Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 46159
diff changeset
7583 int count = SPECPDL_INDEX ();
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7584
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7585 /* 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
7586 XSync (dpy, False);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7587
49054
6b6ac8aa78d2 (x_catch_errors): Save dpy using make_save_value.
Richard M. Stallman <rms@gnu.org>
parents: 48383
diff changeset
7588 record_unwind_protect (x_catch_errors_unwind,
6b6ac8aa78d2 (x_catch_errors): Save dpy using make_save_value.
Richard M. Stallman <rms@gnu.org>
parents: 48383
diff changeset
7589 Fcons (make_save_value (dpy, 0),
6b6ac8aa78d2 (x_catch_errors): Save dpy using make_save_value.
Richard M. Stallman <rms@gnu.org>
parents: 48383
diff changeset
7590 x_error_message_string));
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7591
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7592 x_error_message_string = make_uninit_string (X_ERROR_MESSAGE_SIZE);
46435
278371336b60 * xterm.c (x_catch_errors, x_clear_errors): Use SSET.
Ken Raeburn <raeburn@raeburn.org>
parents: 46370
diff changeset
7593 SSET (x_error_message_string, 0, 0);
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7594
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7595 return count;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7596 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7597
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7598 /* 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
7599
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7600 static Lisp_Object
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7601 x_catch_errors_unwind (old_val)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7602 Lisp_Object old_val;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7603 {
49054
6b6ac8aa78d2 (x_catch_errors): Save dpy using make_save_value.
Richard M. Stallman <rms@gnu.org>
parents: 48383
diff changeset
7604 Lisp_Object first;
6b6ac8aa78d2 (x_catch_errors): Save dpy using make_save_value.
Richard M. Stallman <rms@gnu.org>
parents: 48383
diff changeset
7605
6b6ac8aa78d2 (x_catch_errors): Save dpy using make_save_value.
Richard M. Stallman <rms@gnu.org>
parents: 48383
diff changeset
7606 first = XCAR (old_val);
6b6ac8aa78d2 (x_catch_errors): Save dpy using make_save_value.
Richard M. Stallman <rms@gnu.org>
parents: 48383
diff changeset
7607
6b6ac8aa78d2 (x_catch_errors): Save dpy using make_save_value.
Richard M. Stallman <rms@gnu.org>
parents: 48383
diff changeset
7608 XSync (XSAVE_VALUE (first)->pointer, False);
6b6ac8aa78d2 (x_catch_errors): Save dpy using make_save_value.
Richard M. Stallman <rms@gnu.org>
parents: 48383
diff changeset
7609
6b6ac8aa78d2 (x_catch_errors): Save dpy using make_save_value.
Richard M. Stallman <rms@gnu.org>
parents: 48383
diff changeset
7610 x_error_message_string = XCDR (old_val);
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7611 return Qnil;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7612 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7613
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7614 /* 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
7615 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
7616 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
7617
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7618 void
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7619 x_check_errors (dpy, format)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7620 Display *dpy;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7621 char *format;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7622 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7623 /* 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
7624 XSync (dpy, False);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7625
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
7626 if (SREF (x_error_message_string, 0))
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
7627 error (format, SDATA (x_error_message_string));
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7628 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7629
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
7630 /* 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
7631 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
7632
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7633 int
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7634 x_had_errors_p (dpy)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7635 Display *dpy;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7636 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7637 /* 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
7638 XSync (dpy, False);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7639
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
7640 return SREF (x_error_message_string, 0) != 0;
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7641 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7642
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
7643 /* 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
7644
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7645 void
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
7646 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
7647 Display *dpy;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
7648 {
46435
278371336b60 * xterm.c (x_catch_errors, x_clear_errors): Use SSET.
Ken Raeburn <raeburn@raeburn.org>
parents: 46370
diff changeset
7649 SSET (x_error_message_string, 0, 0);
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
7650 }
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
7651
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7652 /* 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
7653 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
7654 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
7655 the corresponding call to x_catch_errors. */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7656
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7657 void
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7658 x_uncatch_errors (dpy, count)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7659 Display *dpy;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7660 int count;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7661 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7662 unbind_to (count, Qnil);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7663 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7664
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7665 #if 0
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7666 static unsigned int x_wire_count;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7667 x_trace_wire ()
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7668 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7669 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
7670 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7671 #endif /* ! 0 */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7672
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7673
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7674 /* 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
7675 simply goes away. SIGPIPE is handled by x_connection_signal.
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7676 Don't need to do anything, because the write which caused the
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7677 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
7678 which will do the appropriate cleanup for us. */
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7679
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7680 static SIGTYPE
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7681 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
7682 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
7683 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7684 #ifdef USG
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7685 /* USG systems forget handlers when they are used;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7686 must reestablish each time */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7687 signal (signalnum, x_connection_signal);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7688 #endif /* USG */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7689 }
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7690
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7691
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7692 /************************************************************************
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7693 Handling X errors
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7694 ************************************************************************/
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7695
39586
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7696 /* Error message passed to x_connection_closed. */
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7697
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7698 static char *error_msg;
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7699
40370
712d604d52eb Fix typo in a comment.
Pavel Janík <Pavel@Janik.cz>
parents: 40329
diff changeset
7700 /* Function installed as fatal_error_signal_hook in
39586
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7701 x_connection_closed. Print the X error message, and exit normally,
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7702 instead of dumping core when XtCloseDisplay fails. */
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7703
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7704 static void
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7705 x_fatal_error_signal ()
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7706 {
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7707 fprintf (stderr, "%s\n", error_msg);
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7708 exit (70);
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7709 }
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7710
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7711 /* Handle the loss of connection to display DPY. ERROR_MESSAGE is
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7712 the text of an error message that lead to the connection loss. */
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
7713
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 555
diff changeset
7714 static SIGTYPE
34673
77cda2c018e5 (x_connection_closed): Prevent being called recursively
Gerd Moellmann <gerd@gnu.org>
parents: 34621
diff changeset
7715 x_connection_closed (dpy, error_message)
77cda2c018e5 (x_connection_closed): Prevent being called recursively
Gerd Moellmann <gerd@gnu.org>
parents: 34621
diff changeset
7716 Display *dpy;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7717 char *error_message;
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 555
diff changeset
7718 {
34673
77cda2c018e5 (x_connection_closed): Prevent being called recursively
Gerd Moellmann <gerd@gnu.org>
parents: 34621
diff changeset
7719 struct x_display_info *dpyinfo = x_display_info_for_display (dpy);
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7720 Lisp_Object frame, tail;
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7721 int count;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7722
39586
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7723 error_msg = (char *) alloca (strlen (error_message) + 1);
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7724 strcpy (error_msg, error_message);
34949
bbd0e7b5043a (x_connection_closed): Set handling_signal to 0 at
Gerd Moellmann <gerd@gnu.org>
parents: 34869
diff changeset
7725 handling_signal = 0;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7726
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7727 /* Prevent being called recursively because of an error condition
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7728 below. Otherwise, we might end up with printing ``can't find per
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7729 display information'' in the recursive call instead of printing
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7730 the original message here. */
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7731 count = x_catch_errors (dpy);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7732
34213
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7733 /* We have to close the display to inform Xt that it doesn't
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7734 exist anymore. If we don't, Xt will continue to wait for
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7735 events from the display. As a consequence, a sequence of
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7736
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7737 M-x make-frame-on-display RET :1 RET
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7738 ...kill the new frame, so that we get an IO error...
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7739 M-x make-frame-on-display RET :1 RET
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7740
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7741 will indefinitely wait in Xt for events for display `:1', opened
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7742 in the first class to make-frame-on-display.
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7743
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7744 Closing the display is reported to lead to a bus error on
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7745 OpenWindows in certain situations. I suspect that is a bug
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7746 in OpenWindows. I don't know how to cicumvent it here. */
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7747
17825
281d99590839 (dumpglyphs): Draw glyphs one by one if the font for
Kenichi Handa <handa@m17n.org>
parents: 17720
diff changeset
7748 #ifdef USE_X_TOOLKIT
35309
cb7e1d7b6b67 (x_connection_closed) [USE_X_TOOLKIT]: If
Gerd Moellmann <gerd@gnu.org>
parents: 35276
diff changeset
7749 /* If DPYINFO is null, this means we didn't open the display
cb7e1d7b6b67 (x_connection_closed) [USE_X_TOOLKIT]: If
Gerd Moellmann <gerd@gnu.org>
parents: 35276
diff changeset
7750 in the first place, so don't try to close it. */
cb7e1d7b6b67 (x_connection_closed) [USE_X_TOOLKIT]: If
Gerd Moellmann <gerd@gnu.org>
parents: 35276
diff changeset
7751 if (dpyinfo)
39586
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7752 {
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7753 extern void (*fatal_error_signal_hook) P_ ((void));
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7754 fatal_error_signal_hook = x_fatal_error_signal;
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7755 XtCloseDisplay (dpy);
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7756 fatal_error_signal_hook = NULL;
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7757 }
17825
281d99590839 (dumpglyphs): Draw glyphs one by one if the font for
Kenichi Handa <handa@m17n.org>
parents: 17720
diff changeset
7758 #endif
34213
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7759
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7760 /* Indicate that this display is dead. */
29536
4def8a9e785a * xterm.c (x_connection_closed): If dpyinfo is NULL, don't try to
Ken Raeburn <raeburn@raeburn.org>
parents: 29512
diff changeset
7761 if (dpyinfo)
4def8a9e785a * xterm.c (x_connection_closed): If dpyinfo is NULL, don't try to
Ken Raeburn <raeburn@raeburn.org>
parents: 29512
diff changeset
7762 dpyinfo->display = 0;
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
7763
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7764 /* 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
7765 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
7766 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
7767 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7768 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
7769 minibuf_frame
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7770 = 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
7771 if (FRAME_X_P (XFRAME (frame))
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
7772 && FRAME_X_P (XFRAME (minibuf_frame))
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
7773 && ! EQ (frame, minibuf_frame)
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
7774 && 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
7775 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
7776 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7777
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7778 /* 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
7779 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
7780 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
7781 FOR_EACH_FRAME (tail, frame)
10921
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
7782 if (FRAME_X_P (XFRAME (frame))
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
7783 && 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
7784 {
0d37c1e81c0d (x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents: 11901
diff changeset
7785 /* 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
7786 trying to find a replacement. */
0d37c1e81c0d (x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents: 11901
diff changeset
7787 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
7788 Fdelete_frame (frame, Qt);
0d37c1e81c0d (x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents: 11901
diff changeset
7789 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7790
13727
9eb09adbcb38 (x_connection_closed): Don't delete dpyinfo if it's null.
Karl Heuer <kwzh@gnu.org>
parents: 13633
diff changeset
7791 if (dpyinfo)
9eb09adbcb38 (x_connection_closed): Don't delete dpyinfo if it's null.
Karl Heuer <kwzh@gnu.org>
parents: 13633
diff changeset
7792 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
7793
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7794 x_uncatch_errors (dpy, count);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7795
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7796 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
7797 {
39586
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7798 fprintf (stderr, "%s\n", error_msg);
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7799 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
7800 exit (70);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7801 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7802
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7803 /* 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
7804 #ifdef SIGIO
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7805 sigunblock (sigmask (SIGIO));
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7806 #endif
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7807 sigunblock (sigmask (SIGALRM));
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7808 TOTALLY_UNBLOCK_INPUT;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7809
15526
926ef4afc174 (x_connection_closed): Call clear_waiting_for_input.
Richard M. Stallman <rms@gnu.org>
parents: 15521
diff changeset
7810 clear_waiting_for_input ();
39586
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7811 error ("%s", error_msg);
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7812 }
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7813
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 555
diff changeset
7814
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7815 /* 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
7816 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
7817 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
7818
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7819 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
7820 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
7821 Display *display;
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
7822 XErrorEvent *error;
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
7823 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7824 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
7825
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
7826 /* 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
7827 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
7828
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
7829 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
7830 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
7831 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
7832 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
7833 }
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
7834
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7835
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7836 /* 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
7837 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
7838
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7839 static int
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7840 x_error_handler (display, error)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7841 Display *display;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7842 XErrorEvent *error;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7843 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7844 if (! NILP (x_error_message_string))
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7845 x_error_catcher (display, error);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7846 else
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7847 x_error_quitter (display, error);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7848 return 0;
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7849 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7850
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7851 /* 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
7852 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
7853 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
7854
1875
f569bc4e9b8f * xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents: 1841
diff changeset
7855 static int
f569bc4e9b8f * xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents: 1841
diff changeset
7856 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
7857 Display *display;
f569bc4e9b8f * xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents: 1841
diff changeset
7858 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7859 char buf[256];
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7860
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7861 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
7862 x_connection_closed (display, buf);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7863 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
7864 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7865
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7866 /* 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
7867
8291
9c6ddd14996b (struct font_info): New field full_name.
Richard M. Stallman <rms@gnu.org>
parents: 8279
diff changeset
7868 /* 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
7869 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
7870 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
7871 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
7872
3076
e3b3c67cf203 Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents: 3066
diff changeset
7873 Lisp_Object
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
7874 x_new_font (f, fontname)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
7875 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7876 register char *fontname;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7877 {
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7878 struct font_info *fontp
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
7879 = FS_LOAD_FONT (f, 0, fontname, -1);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7880
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7881 if (!fontp)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7882 return Qnil;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7883
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7884 FRAME_FONT (f) = (XFontStruct *) (fontp->font);
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7885 FRAME_BASELINE_OFFSET (f) = fontp->baseline_offset;
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7886 FRAME_FONTSET (f) = -1;
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7887
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7888 FRAME_COLUMN_WIDTH (f) = FONT_WIDTH (FRAME_FONT (f));
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7889 FRAME_LINE_HEIGHT (f) = FONT_HEIGHT (FRAME_FONT (f));
41721
e0335ea68760 (zv_height, zv_bits, zv_period): Changed zv bitmap to
Kim F. Storm <storm@cua.dk>
parents: 41631
diff changeset
7890
50097
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
7891 compute_fringe_widths (f, 1);
41721
e0335ea68760 (zv_height, zv_bits, zv_period): Changed zv bitmap to
Kim F. Storm <storm@cua.dk>
parents: 41631
diff changeset
7892
9167
8ad448b29c1c (x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents: 9101
diff changeset
7893 /* Compute the scroll bar width in character columns. */
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7894 if (FRAME_CONFIG_SCROLL_BAR_WIDTH (f) > 0)
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7895 {
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7896 int wid = FRAME_COLUMN_WIDTH (f);
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7897 FRAME_CONFIG_SCROLL_BAR_COLS (f)
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7898 = (FRAME_CONFIG_SCROLL_BAR_WIDTH (f) + wid-1) / wid;
9167
8ad448b29c1c (x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents: 9101
diff changeset
7899 }
8ad448b29c1c (x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents: 9101
diff changeset
7900 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
7901 {
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7902 int wid = FRAME_COLUMN_WIDTH (f);
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7903 FRAME_CONFIG_SCROLL_BAR_COLS (f) = (14 + wid - 1) / wid;
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
7904 }
9167
8ad448b29c1c (x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents: 9101
diff changeset
7905
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
7906 /* 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
7907 if (FRAME_X_WINDOW (f) != 0)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7908 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
7909 XSetFont (FRAME_X_DISPLAY (f), f->output_data.x->normal_gc,
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7910 FRAME_FONT (f)->fid);
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
7911 XSetFont (FRAME_X_DISPLAY (f), f->output_data.x->reverse_gc,
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7912 FRAME_FONT (f)->fid);
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
7913 XSetFont (FRAME_X_DISPLAY (f), f->output_data.x->cursor_gc,
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7914 FRAME_FONT (f)->fid);
35506
5ad77d538e08 (x_new_font): Don't change a tooltip's size.
Gerd Moellmann <gerd@gnu.org>
parents: 35487
diff changeset
7915
5ad77d538e08 (x_new_font): Don't change a tooltip's size.
Gerd Moellmann <gerd@gnu.org>
parents: 35487
diff changeset
7916 /* Don't change the size of a tip frame; there's no point in
5ad77d538e08 (x_new_font): Don't change a tooltip's size.
Gerd Moellmann <gerd@gnu.org>
parents: 35487
diff changeset
7917 doing it because it's done in Fx_show_tip, and it leads to
5ad77d538e08 (x_new_font): Don't change a tooltip's size.
Gerd Moellmann <gerd@gnu.org>
parents: 35487
diff changeset
7918 problems because the tip frame has no widget. */
5ad77d538e08 (x_new_font): Don't change a tooltip's size.
Gerd Moellmann <gerd@gnu.org>
parents: 35487
diff changeset
7919 if (NILP (tip_frame) || XFRAME (tip_frame) != f)
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7920 x_set_window_size (f, 0, FRAME_COLS (f), FRAME_LINES (f));
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7921 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7922
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7923 return build_string (fontp->full_name);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7924 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7925
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7926 /* 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
7927 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
7928 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
7929 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
7930
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7931 Lisp_Object
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7932 x_new_fontset (f, fontsetname)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7933 struct frame *f;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7934 char *fontsetname;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7935 {
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
7936 int fontset = fs_query_fontset (build_string (fontsetname), 0);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7937 Lisp_Object result;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7938
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7939 if (fontset < 0)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7940 return Qnil;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7941
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7942 if (FRAME_FONTSET (f) == fontset)
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
7943 /* 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
7944 to do. */
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
7945 return fontset_name (fontset);
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
7946
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
7947 result = x_new_font (f, (SDATA (fontset_ascii (fontset))));
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7948
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7949 if (!STRINGP (result))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7950 /* Can't load ASCII font. */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7951 return Qnil;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7952
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7953 /* Since x_new_font doesn't update any fontset information, do it now. */
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7954 FRAME_FONTSET (f) = fontset;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7955
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7956 #ifdef HAVE_X_I18N
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7957 if (FRAME_XIC (f)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7958 && (FRAME_XIC_STYLE (f) & (XIMPreeditPosition | XIMStatusArea)))
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
7959 xic_set_xfontset (f, SDATA (fontset_ascii (fontset)));
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7960 #endif
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7961
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7962 return build_string (fontsetname);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7963 }
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7964
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7965
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7966 /***********************************************************************
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7967 X Input Methods
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7968 ***********************************************************************/
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7969
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7970 #ifdef HAVE_X_I18N
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7971
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7972 #ifdef HAVE_X11R6
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7973
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7974 /* XIM destroy callback function, which is called whenever the
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7975 connection to input method XIM dies. CLIENT_DATA contains a
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7976 pointer to the x_display_info structure corresponding to XIM. */
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7977
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7978 static void
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7979 xim_destroy_callback (xim, client_data, call_data)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7980 XIM xim;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7981 XPointer client_data;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7982 XPointer call_data;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7983 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7984 struct x_display_info *dpyinfo = (struct x_display_info *) client_data;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7985 Lisp_Object frame, tail;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7986
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7987 BLOCK_INPUT;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7988
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7989 /* No need to call XDestroyIC.. */
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7990 FOR_EACH_FRAME (tail, frame)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7991 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7992 struct frame *f = XFRAME (frame);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7993 if (FRAME_X_DISPLAY_INFO (f) == dpyinfo)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7994 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7995 FRAME_XIC (f) = NULL;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7996 if (FRAME_XIC_FONTSET (f))
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7997 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7998 XFreeFontSet (FRAME_X_DISPLAY (f), FRAME_XIC_FONTSET (f));
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7999 FRAME_XIC_FONTSET (f) = NULL;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8000 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8001 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8002 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8003
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8004 /* No need to call XCloseIM. */
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8005 dpyinfo->xim = NULL;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8006 XFree (dpyinfo->xim_styles);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8007 UNBLOCK_INPUT;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8008 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8009
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8010 #endif /* HAVE_X11R6 */
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8011
48085
1c06bf924a62 (Qeql): Declare.
Dave Love <fx@gnu.org>
parents: 48025
diff changeset
8012 #ifdef HAVE_X11R6
1c06bf924a62 (Qeql): Declare.
Dave Love <fx@gnu.org>
parents: 48025
diff changeset
8013 /* This isn't prototyped in OSF 5.0 or 5.1a. */
1c06bf924a62 (Qeql): Declare.
Dave Love <fx@gnu.org>
parents: 48025
diff changeset
8014 extern char *XSetIMValues P_ ((XIM, ...));
1c06bf924a62 (Qeql): Declare.
Dave Love <fx@gnu.org>
parents: 48025
diff changeset
8015 #endif
1c06bf924a62 (Qeql): Declare.
Dave Love <fx@gnu.org>
parents: 48025
diff changeset
8016
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8017 /* Open the connection to the XIM server on display DPYINFO.
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8018 RESOURCE_NAME is the resource name Emacs uses. */
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8019
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8020 static void
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8021 xim_open_dpy (dpyinfo, resource_name)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8022 struct x_display_info *dpyinfo;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8023 char *resource_name;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8024 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8025 XIM xim;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8026
52076
039e1c55561e (xim_open_dpy, xim_initialize, xim_close_dpy):
Richard M. Stallman <rms@gnu.org>
parents: 51953
diff changeset
8027 #ifdef HAVE_XIM
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8028 if (use_xim)
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8029 {
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8030 xim = XOpenIM (dpyinfo->display, dpyinfo->xrdb, resource_name,
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8031 EMACS_CLASS);
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8032 dpyinfo->xim = xim;
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8033
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8034 if (xim)
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8035 {
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8036 #ifdef HAVE_X11R6
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8037 XIMCallback destroy;
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8038 #endif
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8039
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8040 /* Get supported styles and XIM values. */
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8041 XGetIMValues (xim, XNQueryInputStyle, &dpyinfo->xim_styles, NULL);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8042
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8043 #ifdef HAVE_X11R6
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8044 destroy.callback = xim_destroy_callback;
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8045 destroy.client_data = (XPointer)dpyinfo;
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8046 XSetIMValues (xim, XNDestroyCallback, &destroy, NULL);
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8047 #endif
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8048 }
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8049 }
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8050
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8051 else
52076
039e1c55561e (xim_open_dpy, xim_initialize, xim_close_dpy):
Richard M. Stallman <rms@gnu.org>
parents: 51953
diff changeset
8052 #endif /* HAVE_XIM */
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8053 dpyinfo->xim = NULL;
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8054 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8055
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8056
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
8057 #ifdef HAVE_X11R6_XIM
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8058
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8059 struct xim_inst_t
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8060 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8061 struct x_display_info *dpyinfo;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8062 char *resource_name;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8063 };
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8064
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8065 /* XIM instantiate callback function, which is called whenever an XIM
49434
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
8066 server is available. DISPLAY is the display of the XIM.
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8067 CLIENT_DATA contains a pointer to an xim_inst_t structure created
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8068 when the callback was registered. */
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8069
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8070 static void
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8071 xim_instantiate_callback (display, client_data, call_data)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8072 Display *display;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8073 XPointer client_data;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8074 XPointer call_data;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8075 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8076 struct xim_inst_t *xim_inst = (struct xim_inst_t *) client_data;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8077 struct x_display_info *dpyinfo = xim_inst->dpyinfo;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8078
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8079 /* We don't support multiple XIM connections. */
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8080 if (dpyinfo->xim)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8081 return;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8082
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8083 xim_open_dpy (dpyinfo, xim_inst->resource_name);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8084
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8085 /* Create XIC for the existing frames on the same display, as long
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8086 as they have no XIC. */
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8087 if (dpyinfo->xim && dpyinfo->reference_count > 0)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8088 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8089 Lisp_Object tail, frame;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8090
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8091 BLOCK_INPUT;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8092 FOR_EACH_FRAME (tail, frame)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8093 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8094 struct frame *f = XFRAME (frame);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8095
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8096 if (FRAME_X_DISPLAY_INFO (f) == xim_inst->dpyinfo)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8097 if (FRAME_XIC (f) == NULL)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8098 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8099 create_frame_xic (f);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8100 if (FRAME_XIC_STYLE (f) & XIMStatusArea)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8101 xic_set_statusarea (f);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8102 if (FRAME_XIC_STYLE (f) & XIMPreeditPosition)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8103 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8104 struct window *w = XWINDOW (f->selected_window);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8105 xic_set_preeditarea (w, w->cursor.x, w->cursor.y);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8106 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8107 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8108 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8109
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8110 UNBLOCK_INPUT;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8111 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8112 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8113
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
8114 #endif /* HAVE_X11R6_XIM */
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8115
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8116
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8117 /* Open a connection to the XIM server on display DPYINFO.
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8118 RESOURCE_NAME is the resource name for Emacs. On X11R5, open the
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8119 connection only at the first time. On X11R6, open the connection
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8120 in the XIM instantiate callback function. */
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8121
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8122 static void
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8123 xim_initialize (dpyinfo, resource_name)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8124 struct x_display_info *dpyinfo;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8125 char *resource_name;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8126 {
52076
039e1c55561e (xim_open_dpy, xim_initialize, xim_close_dpy):
Richard M. Stallman <rms@gnu.org>
parents: 51953
diff changeset
8127 #ifdef HAVE_XIM
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8128 if (use_xim)
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8129 {
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
8130 #ifdef HAVE_X11R6_XIM
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8131 struct xim_inst_t *xim_inst;
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8132 int len;
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8133
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8134 dpyinfo->xim = NULL;
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8135 xim_inst = (struct xim_inst_t *) xmalloc (sizeof (struct xim_inst_t));
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8136 xim_inst->dpyinfo = dpyinfo;
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8137 len = strlen (resource_name);
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8138 xim_inst->resource_name = (char *) xmalloc (len + 1);
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8139 bcopy (resource_name, xim_inst->resource_name, len + 1);
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8140 XRegisterIMInstantiateCallback (dpyinfo->display, dpyinfo->xrdb,
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8141 resource_name, EMACS_CLASS,
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8142 xim_instantiate_callback,
51649
fab11a57338c (xim_initialize): Use XRegisterIMInstantiateCallback_arg6.
Dave Love <fx@gnu.org>
parents: 51576
diff changeset
8143 /* This is XPointer in XFree86
fab11a57338c (xim_initialize): Use XRegisterIMInstantiateCallback_arg6.
Dave Love <fx@gnu.org>
parents: 51576
diff changeset
8144 but (XPointer *) on Tru64, at
fab11a57338c (xim_initialize): Use XRegisterIMInstantiateCallback_arg6.
Dave Love <fx@gnu.org>
parents: 51576
diff changeset
8145 least, hence the configure test. */
51953
610a102ed36c (xim_initialize): Redo 6/24 change.
Richard M. Stallman <rms@gnu.org>
parents: 51897
diff changeset
8146 (XRegisterIMInstantiateCallback_arg6) xim_inst);
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
8147 #else /* not HAVE_X11R6_XIM */
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8148 dpyinfo->xim = NULL;
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8149 xim_open_dpy (dpyinfo, resource_name);
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
8150 #endif /* not HAVE_X11R6_XIM */
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8151
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8152 }
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8153 else
52076
039e1c55561e (xim_open_dpy, xim_initialize, xim_close_dpy):
Richard M. Stallman <rms@gnu.org>
parents: 51953
diff changeset
8154 #endif /* HAVE_XIM */
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8155 dpyinfo->xim = NULL;
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8156 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8157
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8158
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8159 /* Close the connection to the XIM server on display DPYINFO. */
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8160
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8161 static void
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8162 xim_close_dpy (dpyinfo)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8163 struct x_display_info *dpyinfo;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8164 {
52076
039e1c55561e (xim_open_dpy, xim_initialize, xim_close_dpy):
Richard M. Stallman <rms@gnu.org>
parents: 51953
diff changeset
8165 #ifdef HAVE_XIM
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8166 if (use_xim)
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8167 {
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
8168 #ifdef HAVE_X11R6_XIM
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8169 if (dpyinfo->display)
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8170 XUnregisterIMInstantiateCallback (dpyinfo->display, dpyinfo->xrdb,
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8171 NULL, EMACS_CLASS,
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8172 xim_instantiate_callback, NULL);
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
8173 #endif /* not HAVE_X11R6_XIM */
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8174 if (dpyinfo->display)
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8175 XCloseIM (dpyinfo->xim);
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8176 dpyinfo->xim = NULL;
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8177 XFree (dpyinfo->xim_styles);
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8178 }
52076
039e1c55561e (xim_open_dpy, xim_initialize, xim_close_dpy):
Richard M. Stallman <rms@gnu.org>
parents: 51953
diff changeset
8179 #endif /* HAVE_XIM */
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8180 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8181
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
8182 #endif /* not HAVE_X11R6_XIM */
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8183
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8184
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8185
14826
eec0abb31126 Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 14801
diff changeset
8186 /* Calculate the absolute position in frame F
eec0abb31126 Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 14801
diff changeset
8187 from its current recorded position values and gravity. */
eec0abb31126 Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 14801
diff changeset
8188
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
8189 void
7264
a701bffa0f9d (x_calc_absolute_position): Use size_hint_flags.
Richard M. Stallman <rms@gnu.org>
parents: 7262
diff changeset
8190 x_calc_absolute_position (f)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8191 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8192 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8193 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
8194 int win_x = 0, win_y = 0;
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8195 int flags = f->size_hint_flags;
11896
507a45c7e911 (x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents: 11807
diff changeset
8196 int this_window;
507a45c7e911 (x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents: 11807
diff changeset
8197
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
8198 /* 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
8199 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
8200 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
8201 return;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
8202
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8203 this_window = FRAME_OUTER_WINDOW (f);
4630
70247ce8b381 (x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents: 4493
diff changeset
8204
70247ce8b381 (x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents: 4493
diff changeset
8205 /* 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
8206 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
8207 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
8208 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
8209 {
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
8210 int count;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
8211
4630
70247ce8b381 (x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents: 4493
diff changeset
8212 BLOCK_INPUT;
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
8213 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
8214 while (1)
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
8215 {
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
8216 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
8217 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
8218
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
8219 /* 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
8220 this_window,
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
8221 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
8222
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
8223 /* 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
8224 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
8225
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
8226 /* Child of win. */
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
8227 &child);
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
8228 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
8229 {
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
8230 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
8231 Window *newchildren;
29435
28c6b6d0ed6b (x_calc_absolute_position): Declare nchildren unsigned.
Dave Love <fx@gnu.org>
parents: 29393
diff changeset
8232 unsigned int nchildren;
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
8233
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
8234 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
8235 &newparent, &newchildren, &nchildren))
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
8236 break;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
8237
23107
44eda932afcf (x_calc_absolute_position): Cast argument to XFree, in
Karl Heuer <kwzh@gnu.org>
parents: 23095
diff changeset
8238 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
8239
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
8240 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
8241 }
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
8242 else
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
8243 break;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
8244 }
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
8245
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
8246 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
8247 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
8248 }
70247ce8b381 (x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents: 4493
diff changeset
8249
70247ce8b381 (x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents: 4493
diff changeset
8250 /* 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
8251 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
8252 if (flags & XNegative)
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8253 f->left_pos = (FRAME_X_DISPLAY_INFO (f)->width
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8254 - 2 * f->border_width - win_x
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8255 - FRAME_PIXEL_WIDTH (f)
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8256 + f->left_pos);
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8257
34099
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
8258 {
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8259 int height = FRAME_PIXEL_HEIGHT (f);
34099
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
8260
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
8261 #if defined USE_X_TOOLKIT && defined USE_MOTIF
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
8262 /* Something is fishy here. When using Motif, starting Emacs with
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
8263 `-g -0-0', the frame appears too low by a few pixels.
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
8264
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
8265 This seems to be so because initially, while Emacs is starting,
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
8266 the column widget's height and the frame's pixel height are
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
8267 different. The column widget's height is the right one. In
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
8268 later invocations, when Emacs is up, the frame's pixel height
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
8269 is right, though.
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
8270
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
8271 It's not obvious where the initial small difference comes from.
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
8272 2000-12-01, gerd. */
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8273
34099
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
8274 XtVaGetValues (f->output_data.x->column_widget, XtNheight, &height, NULL);
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
8275 #endif
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
8276
7262
68fc80bf10df (x_wm_set_size_hint): Don't try to handle negative positions.
Richard M. Stallman <rms@gnu.org>
parents: 7210
diff changeset
8277 if (flags & YNegative)
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8278 f->top_pos = (FRAME_X_DISPLAY_INFO (f)->height
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8279 - 2 * f->border_width
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8280 - win_y
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8281 - height
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8282 + f->top_pos);
34099
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
8283 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8284
7409
fe56a02838ba (x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents: 7346
diff changeset
8285 /* 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
8286 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
8287 so the flags should correspond. */
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8288 f->size_hint_flags &= ~ (XNegative | YNegative);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8289 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8290
7409
fe56a02838ba (x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents: 7346
diff changeset
8291 /* 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
8292 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
8293 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
8294 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
8295 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
8296
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
8297 void
6934
e0ab4f59004e (dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents: 6883
diff changeset
8298 x_set_offset (f, xoff, yoff, change_gravity)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8299 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8300 register int xoff, yoff;
6934
e0ab4f59004e (dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents: 6883
diff changeset
8301 int change_gravity;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8302 {
11901
8ecc60a02138 (x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents: 11896
diff changeset
8303 int modified_top, modified_left;
8ecc60a02138 (x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents: 11896
diff changeset
8304
11988
a1ce6f699967 (x_set_offset): Distinguish CHANGE_GRAVITY < 0 case.
Karl Heuer <kwzh@gnu.org>
parents: 11953
diff changeset
8305 if (change_gravity > 0)
7409
fe56a02838ba (x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents: 7346
diff changeset
8306 {
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8307 f->top_pos = yoff;
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8308 f->left_pos = xoff;
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8309 f->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
8310 if (xoff < 0)
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8311 f->size_hint_flags |= XNegative;
7409
fe56a02838ba (x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents: 7346
diff changeset
8312 if (yoff < 0)
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8313 f->size_hint_flags |= YNegative;
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8314 f->win_gravity = NorthWestGravity;
7409
fe56a02838ba (x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents: 7346
diff changeset
8315 }
7264
a701bffa0f9d (x_calc_absolute_position): Use size_hint_flags.
Richard M. Stallman <rms@gnu.org>
parents: 7262
diff changeset
8316 x_calc_absolute_position (f);
52546
4e5fa718d892 * xterm.c (x_set_offset): Take window manager decorations
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
8317
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8318 BLOCK_INPUT;
11915
e2ab839155e1 (XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents: 11904
diff changeset
8319 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
8320
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8321 modified_left = f->left_pos;
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8322 modified_top = f->top_pos;
52546
4e5fa718d892 * xterm.c (x_set_offset): Take window manager decorations
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
8323 modified_left += FRAME_X_OUTPUT (f)->x_pixels_outer_diff;
4e5fa718d892 * xterm.c (x_set_offset): Take window manager decorations
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
8324 modified_top += FRAME_X_OUTPUT (f)->y_pixels_outer_diff;
4e5fa718d892 * xterm.c (x_set_offset): Take window manager decorations
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
8325
17519
5aa7011aa3d5 (x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents: 17371
diff changeset
8326 #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
8327 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
8328 /* 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
8329 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
8330 if (change_gravity != 0)
11901
8ecc60a02138 (x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents: 11896
diff changeset
8331 {
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8332 modified_left += f->border_width;
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8333 modified_top += f->border_width;
11901
8ecc60a02138 (x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents: 11896
diff changeset
8334 }
17519
5aa7011aa3d5 (x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents: 17371
diff changeset
8335 #endif
11901
8ecc60a02138 (x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents: 11896
diff changeset
8336
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8337 XMoveWindow (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f),
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8338 modified_left, modified_top);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8339 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8340 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8341
42717
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8342 /* Check if we need to resize the frame due to a fullscreen request.
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8343 If so needed, resize the frame. */
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8344 static void
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8345 x_check_fullscreen (f)
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8346 struct frame *f;
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8347 {
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8348 if (f->want_fullscreen & FULLSCREEN_BOTH)
42717
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8349 {
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8350 int width, height, ign;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8351
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8352 x_real_positions (f, &f->left_pos, &f->top_pos);
42717
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8353
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8354 x_fullscreen_adjust (f, &width, &height, &ign, &ign);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8355
42717
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8356 /* We do not need to move the window, it shall be taken care of
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8357 when setting WM manager hints.
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8358 If the frame is visible already, the position is checked by
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8359 x_check_fullscreen_move. */
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8360 if (FRAME_COLS (f) != width || FRAME_LINES (f) != height)
42717
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8361 {
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8362 change_frame_size (f, height, width, 0, 1, 0);
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8363 SET_FRAME_GARBAGED (f);
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8364 cancel_mouse_face (f);
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8365
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8366 /* Wait for the change of frame size to occur */
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8367 f->want_fullscreen |= FULLSCREEN_WAIT;
42717
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8368 }
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8369 }
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8370 }
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8371
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8372 /* If frame parameters are set after the frame is mapped, we need to move
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8373 the window. This is done in xfns.c.
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8374 Some window managers moves the window to the right position, some
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8375 moves the outer window manager window to the specified position.
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8376 Here we check that we are in the right spot. If not, make a second
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8377 move, assuming we are dealing with the second kind of window manager. */
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8378 static void
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8379 x_check_fullscreen_move (f)
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8380 struct frame *f;
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8381 {
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8382 if (f->want_fullscreen & FULLSCREEN_MOVE_WAIT)
42717
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8383 {
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8384 int expect_top = f->top_pos;
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8385 int expect_left = f->left_pos;
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8386
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8387 if (f->want_fullscreen & FULLSCREEN_HEIGHT)
42717
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8388 expect_top = 0;
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8389 if (f->want_fullscreen & FULLSCREEN_WIDTH)
42717
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8390 expect_left = 0;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8391
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8392 if (expect_top != f->top_pos || expect_left != f->left_pos)
42717
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8393 x_set_offset (f, expect_left, expect_top, 1);
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8394
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8395 /* Just do this once */
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8396 f->want_fullscreen &= ~FULLSCREEN_MOVE_WAIT;
42717
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8397 }
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8398 }
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8399
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8400
35487
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8401 /* Change the size of frame F's X window to COLS/ROWS in the case F
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8402 doesn't have a widget. If CHANGE_GRAVITY is 1, we change to
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8403 top-left-corner window gravity for this size change and subsequent
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8404 size changes. Otherwise we leave the window gravity unchanged. */
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8405
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8406 static void
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8407 x_set_window_size_1 (f, change_gravity, cols, rows)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8408 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
8409 int change_gravity;
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
8410 int cols, rows;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8411 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8412 int pixelwidth, pixelheight;
5686
0c351de98a26 (x_set_window_size): Add USE_X_TOOLKIT conditional. Call EmacsFrameSetCharSize and return.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 5685
diff changeset
8413
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
8414 check_frame_size (f, &rows, &cols);
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8415 f->scroll_bar_actual_width
9167
8ad448b29c1c (x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents: 9101
diff changeset
8416 = (!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
8417 ? 0
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8418 : FRAME_CONFIG_SCROLL_BAR_WIDTH (f) > 0
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8419 ? FRAME_CONFIG_SCROLL_BAR_WIDTH (f)
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8420 : (FRAME_CONFIG_SCROLL_BAR_COLS (f) * FRAME_COLUMN_WIDTH (f)));
41721
e0335ea68760 (zv_height, zv_bits, zv_period): Changed zv bitmap to
Kim F. Storm <storm@cua.dk>
parents: 41631
diff changeset
8421
50097
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
8422 compute_fringe_widths (f, 0);
41721
e0335ea68760 (zv_height, zv_bits, zv_period): Changed zv bitmap to
Kim F. Storm <storm@cua.dk>
parents: 41631
diff changeset
8423
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8424 pixelwidth = FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, cols);
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8425 pixelheight = FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, rows);
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8426
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8427 f->win_gravity = NorthWestGravity;
11915
e2ab839155e1 (XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents: 11904
diff changeset
8428 x_wm_set_size_hint (f, (long) 0, 0);
8781
98741404d3e0 Delete X11 conditionals.
Richard M. Stallman <rms@gnu.org>
parents: 8724
diff changeset
8429
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
8430 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
8431 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
8432 pixelwidth, pixelheight);
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
8433
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
8434 /* 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
8435 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
8436 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
8437 ConfigureNotify event gets here.
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8438
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8439 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
8440 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
8441 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
8442 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
8443 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
8444
1c02364724aa (x_set_window_size): When calling change_frame_size, specify 1 for DELAY.
Richard M. Stallman <rms@gnu.org>
parents: 25101
diff changeset
8445 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
8446 a BLOCK_INPUT. */
25360
2f3ad0a21be5 Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents: 25328
diff changeset
8447 change_frame_size (f, rows, cols, 0, 1, 0);
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8448 FRAME_PIXEL_WIDTH (f) = pixelwidth;
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8449 FRAME_PIXEL_HEIGHT (f) = pixelheight;
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
8450
14692
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
8451 /* 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
8452 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
8453 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
8454 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
8455 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
8456
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
8457 XFlush (FRAME_X_DISPLAY (f));
35487
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8458 }
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8459
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8460
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8461 /* Call this to change the size of frame F's x-window.
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8462 If CHANGE_GRAVITY is 1, we change to top-left-corner window gravity
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8463 for this size change and subsequent size changes.
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8464 Otherwise we leave the window gravity unchanged. */
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8465
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8466 void
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8467 x_set_window_size (f, change_gravity, cols, rows)
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8468 struct frame *f;
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8469 int change_gravity;
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8470 int cols, rows;
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8471 {
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8472 BLOCK_INPUT;
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8473
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8474 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8475 if (FRAME_GTK_WIDGET (f))
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8476 xg_frame_set_char_size (f, cols, rows);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8477 else
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8478 x_set_window_size_1 (f, change_gravity, cols, rows);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8479 #elif USE_X_TOOLKIT
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8480
36442
7fda58b1a204 (x_set_window_size): Don't use `None' with widgets; use
Gerd Moellmann <gerd@gnu.org>
parents: 36251
diff changeset
8481 if (f->output_data.x->widget != NULL)
35487
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8482 {
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8483 /* The x and y position of the widget is clobbered by the
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8484 call to XtSetValues within EmacsFrameSetCharSize.
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8485 This is a real kludge, but I don't understand Xt so I can't
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8486 figure out a correct fix. Can anyone else tell me? -- rms. */
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8487 int xpos = f->output_data.x->widget->core.x;
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8488 int ypos = f->output_data.x->widget->core.y;
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8489 EmacsFrameSetCharSize (f->output_data.x->edit_widget, cols, rows);
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8490 f->output_data.x->widget->core.x = xpos;
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8491 f->output_data.x->widget->core.y = ypos;
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8492 }
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8493 else
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8494 x_set_window_size_1 (f, change_gravity, cols, rows);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8495
35487
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8496 #else /* not USE_X_TOOLKIT */
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8497
35487
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8498 x_set_window_size_1 (f, change_gravity, cols, rows);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8499
14692
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
8500 #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
8501
7651
1569a13efdcd (x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents: 7602
diff changeset
8502 /* 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
8503 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
8504
14692
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
8505 /* Clear out any recollection of where the mouse highlighting was,
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8506 since it might be in a place that's outside the new frame size.
14692
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
8507 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
8508 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
8509 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
8510
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8511 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8512 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8513
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
8514 /* Mouse warping. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8515
7026
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
8516 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8517 x_set_mouse_position (f, x, y)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8518 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8519 int x, y;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8520 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8521 int pix_x, pix_y;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8522
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8523 pix_x = FRAME_COL_TO_PIXEL_X (f, x) + FRAME_COLUMN_WIDTH (f) / 2;
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8524 pix_y = FRAME_LINE_TO_PIXEL_Y (f, y) + FRAME_LINE_HEIGHT (f) / 2;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8525
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8526 if (pix_x < 0) pix_x = 0;
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8527 if (pix_x > FRAME_PIXEL_WIDTH (f)) pix_x = FRAME_PIXEL_WIDTH (f);
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8528
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8529 if (pix_y < 0) pix_y = 0;
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8530 if (pix_y > FRAME_PIXEL_HEIGHT (f)) pix_y = FRAME_PIXEL_HEIGHT (f);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8531
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8532 BLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8533
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
8534 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
8535 0, 0, 0, 0, pix_x, pix_y);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8536 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8537 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8538
7026
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
8539 /* 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
8540
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
8541 void
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
8542 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
8543 struct frame *f;
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
8544 int pix_x, pix_y;
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
8545 {
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
8546 BLOCK_INPUT;
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
8547
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
8548 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
8549 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
8550 UNBLOCK_INPUT;
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
8551 }
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
8552
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
8553 /* focus shifting, raising and lowering. */
7026
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
8554
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
8555 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8556 x_focus_on_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8557 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8558 {
5156
fd78458b8c43 (XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents: 5018
diff changeset
8559 #if 0 /* This proves to be unpleasant. */
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8560 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
8561 #endif
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
8562 #if 0
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
8563 /* 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
8564 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
8565 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
8566 XSetInputFocus (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8567 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
8568 #endif /* ! 0 */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8569 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8570
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
8571 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8572 x_unfocus_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8573 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8574 {
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
8575 #if 0
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8576 /* 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
8577 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
8578 XSetInputFocus (FRAME_X_DISPLAY (f), PointerRoot,
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8579 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
8580 #endif /* ! 0 */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8581 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8582
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8583 /* Raise frame F. */
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8584
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
8585 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8586 x_raise_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8587 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8588 {
1658
452ba03935d7 * xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents: 1530
diff changeset
8589 if (f->async_visible)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8590 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8591 BLOCK_INPUT;
49644
834df49192b0 Use FRAME_OUTER_WINDOW instead of ifdef X_TOOLKIT/else/endif
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
8592 XRaiseWindow (FRAME_X_DISPLAY (f), FRAME_OUTER_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
8593 XFlush (FRAME_X_DISPLAY (f));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8594 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8595 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8596 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8597
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8598 /* Lower frame F. */
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8599
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
8600 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8601 x_lower_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8602 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8603 {
1658
452ba03935d7 * xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents: 1530
diff changeset
8604 if (f->async_visible)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8605 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8606 BLOCK_INPUT;
49644
834df49192b0 Use FRAME_OUTER_WINDOW instead of ifdef X_TOOLKIT/else/endif
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
8607 XLowerWindow (FRAME_X_DISPLAY (f), FRAME_OUTER_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
8608 XFlush (FRAME_X_DISPLAY (f));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8609 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8610 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8611 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8612
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8613 static void
14411
bac274f178b0 (XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents: 14305
diff changeset
8614 XTframe_raise_lower (f, raise_flag)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8615 FRAME_PTR f;
14411
bac274f178b0 (XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents: 14305
diff changeset
8616 int raise_flag;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8617 {
14411
bac274f178b0 (XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents: 14305
diff changeset
8618 if (raise_flag)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8619 x_raise_frame (f);
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8620 else
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8621 x_lower_frame (f);
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8622 }
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
8623
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
8624 /* Change of visibility. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8625
12192
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
8626 /* 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
8627 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
8628 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
8629 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
8630 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
8631 finishes with it. */
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
8632
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
8633 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8634 x_make_frame_visible (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8635 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8636 {
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
8637 Lisp_Object type;
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
8638 int original_top, original_left;
31948
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
8639 int retry_count = 2;
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
8640
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
8641 retry:
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8642
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
8643 BLOCK_INPUT;
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
8644
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
8645 type = x_icon_type (f);
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
8646 if (!NILP (type))
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
8647 x_bitmap_icon (f, type);
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
8648
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8649 if (! FRAME_VISIBLE_P (f))
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8650 {
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
8651 /* 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
8652 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
8653 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
8654 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
8655 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
8656 && ! f->output_data.x->asked_for_visible)
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8657 x_set_offset (f, f->left_pos, f->top_pos, 0);
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
8658
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
8659 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
8660
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
8661 if (! EQ (Vx_no_window_manager, Qt))
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8662 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
8663 #ifdef USE_X_TOOLKIT
7167
2fa74c48e4e5 (x_make_frame_visible): Use XtMapWidget, not XtPopup.
Richard M. Stallman <rms@gnu.org>
parents: 7128
diff changeset
8664 /* 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
8665 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
8666 #else /* not USE_X_TOOLKIT */
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8667 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8668 gtk_widget_show_all (FRAME_GTK_OUTER_WIDGET (f));
49651
05ebf4266798 xterm.c (x_make_frame_visible): Call gtk_window_deiconify.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49644
diff changeset
8669 gtk_window_deiconify (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)));
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8670 #else
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
8671 XMapRaised (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f));
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8672 #endif /* not USE_GTK */
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8673 #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
8674 #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
8675 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
8676 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
8677 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
8678 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
8679 #endif
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
8680 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8681
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
8682 XFlush (FRAME_X_DISPLAY (f));
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
8683
7959
224440646fa7 (make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents: 7935
diff changeset
8684 /* 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
8685 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
8686 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
8687 {
224440646fa7 (make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents: 7935
diff changeset
8688 Lisp_Object frame;
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8689 int count;
18528
73f4d9258f04 (x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents: 18347
diff changeset
8690 /* 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
8691 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
8692 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
8693 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
8694
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8695 original_left = f->left_pos;
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8696 original_top = f->top_pos;
9337
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
8697
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
8698 /* This must come after we set COUNT. */
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
8699 UNBLOCK_INPUT;
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
8700
22907
43e290c6fb19 (x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents: 22773
diff changeset
8701 /* 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
8702
18008
d25d2472df51 (XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents: 17963
diff changeset
8703 /* 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
8704 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
8705 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
8706 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
8707
73f4d9258f04 (x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents: 18347
diff changeset
8708 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
8709 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
8710 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
8711
18630
3e414b9da546 (x_make_frame_visible): Don't move the frame
Richard M. Stallman <rms@gnu.org>
parents: 18528
diff changeset
8712 if (! FRAME_VISIBLE_P (f) && ! FRAME_ICONIFIED_P (f)
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8713 && f->win_gravity == NorthWestGravity
18528
73f4d9258f04 (x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents: 18347
diff changeset
8714 && previously_visible)
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
8715 {
22907
43e290c6fb19 (x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents: 22773
diff changeset
8716 Drawable rootw;
43e290c6fb19 (x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents: 22773
diff changeset
8717 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
8718 unsigned int width, height, border, depth;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8719
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
8720 BLOCK_INPUT;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
8721
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8722 /* 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
8723 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
8724 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
8725 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
8726 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
8727 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
8728 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
8729 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
8730 &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
8731
43e290c6fb19 (x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents: 22773
diff changeset
8732 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
8733 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
8734 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
8735
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
8736 UNBLOCK_INPUT;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
8737 }
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
8738
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8739 XSETFRAME (frame, f);
9337
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
8740
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8741 /* Wait until the frame is visible. Process X events until a
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8742 MapNotify event has been seen, or until we think we won't get a
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8743 MapNotify at all.. */
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8744 for (count = input_signal_count + 10;
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8745 input_signal_count < count && !FRAME_VISIBLE_P (f);)
8098
e44c31d682b1 (x_draw_box): Use curs_x and curs_y, not f->cursor_[xy].
Richard M. Stallman <rms@gnu.org>
parents: 8036
diff changeset
8746 {
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8747 /* Force processing of queued events. */
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
8748 x_sync (f);
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8749
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8750 /* Machines that do polling rather than SIGIO have been
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8751 observed to go into a busy-wait here. So we'll fake an
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8752 alarm signal to let the handler know that there's something
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8753 to be read. We used to raise a real alarm, but it seems
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8754 that the handler isn't always enabled here. This is
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8755 probably a bug. */
8682
42f95b1368ea (x_make_frame_visible): Call input_polling_used.
Richard M. Stallman <rms@gnu.org>
parents: 8652
diff changeset
8756 if (input_polling_used ())
8652
c2c1a477ddd5 Include keyboard.h.
Richard M. Stallman <rms@gnu.org>
parents: 8634
diff changeset
8757 {
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8758 /* It could be confusing if a real alarm arrives while
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8759 processing the fake one. Turn it off and let the
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8760 handler reset it. */
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
8761 extern void poll_for_input_1 P_ ((void));
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
8762 int old_poll_suppress_count = poll_suppress_count;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
8763 poll_suppress_count = 1;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
8764 poll_for_input_1 ();
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
8765 poll_suppress_count = old_poll_suppress_count;
8652
c2c1a477ddd5 Include keyboard.h.
Richard M. Stallman <rms@gnu.org>
parents: 8634
diff changeset
8766 }
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8767
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8768 /* See if a MapNotify event has been processed. */
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8769 FRAME_SAMPLE_VISIBILITY (f);
8098
e44c31d682b1 (x_draw_box): Use curs_x and curs_y, not f->cursor_[xy].
Richard M. Stallman <rms@gnu.org>
parents: 8036
diff changeset
8770 }
31948
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
8771
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
8772 /* 2000-09-28: In
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
8773
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
8774 (let ((f (selected-frame)))
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
8775 (iconify-frame f)
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
8776 (raise-frame f))
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
8777
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
8778 the frame is not raised with various window managers on
51093
2c04067bcdc0 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 51048
diff changeset
8779 FreeBSD, GNU/Linux and Solaris. It turns out that, for some
31948
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
8780 unknown reason, the call to XtMapWidget is completely ignored.
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
8781 Mapping the widget a second time works. */
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8782
31948
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
8783 if (!FRAME_VISIBLE_P (f) && --retry_count > 0)
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
8784 goto retry;
7959
224440646fa7 (make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents: 7935
diff changeset
8785 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8786 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8787
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8788 /* Change from mapped state to withdrawn state. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8789
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
8790 /* Make the frame visible (mapped and not iconified). */
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
8791
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
8792 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8793 x_make_frame_invisible (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8794 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8795 {
7602
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
8796 Window window;
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
8797
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
8798 /* Use the frame's outermost window, not the one we normally draw on. */
49644
834df49192b0 Use FRAME_OUTER_WINDOW instead of ifdef X_TOOLKIT/else/endif
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
8799 window = FRAME_OUTER_WINDOW (f);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8800
3284
a47979ffad1e (XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents: 3282
diff changeset
8801 /* 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
8802 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
8803 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
8804
6983
b18e5c09d7c3 (XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents: 6941
diff changeset
8805 #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
8806 if (! f->async_visible && ! f->async_iconified)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8807 return;
6983
b18e5c09d7c3 (XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents: 6941
diff changeset
8808 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8809
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8810 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
8811
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
8812 /* 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
8813 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
8814 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
8815 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
8816 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
8817 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
8818
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8819 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8820 if (FRAME_GTK_OUTER_WIDGET (f))
50324
d9a401f2769d (take_vertical_position_into_account): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50270
diff changeset
8821 gtk_widget_hide (FRAME_GTK_OUTER_WIDGET (f));
d9a401f2769d (take_vertical_position_into_account): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50270
diff changeset
8822 else
d9a401f2769d (take_vertical_position_into_account): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50270
diff changeset
8823 #endif
d9a401f2769d (take_vertical_position_into_account): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50270
diff changeset
8824 {
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
8825 #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
8826
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
8827 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
8828 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
8829 {
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
8830 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
8831 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
8832 }
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
8833 #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
8834
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
8835 /* Tell the window manager what we're going to do. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8836 if (! EQ (Vx_no_window_manager, Qt))
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8837 {
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8838 XEvent unmap;
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8839
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8840 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
8841 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
8842 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
8843 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
8844 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
8845 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
8846 False,
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8847 SubstructureRedirectMaskSubstructureNotifyMask,
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8848 &unmap))
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8849 {
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8850 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
8851 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
8852 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8853 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8854
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8855 /* 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
8856 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
8857 #endif /* ! defined (HAVE_X11R4) */
50324
d9a401f2769d (take_vertical_position_into_account): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50270
diff changeset
8858 }
d9a401f2769d (take_vertical_position_into_account): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50270
diff changeset
8859
6983
b18e5c09d7c3 (XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents: 6941
diff changeset
8860 /* 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
8861 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
8862 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
8863 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
8864 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
8865 f->visible = 0;
b18e5c09d7c3 (XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents: 6941
diff changeset
8866 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
8867 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
8868 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
8869
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
8870 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
8871
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8872 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8873 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8874
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8875 /* Change window state from mapped to iconified. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8876
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
8877 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8878 x_iconify_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8879 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8880 {
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8881 int result;
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
8882 Lisp_Object type;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8883
3284
a47979ffad1e (XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents: 3282
diff changeset
8884 /* 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
8885 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
8886 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
8887
1658
452ba03935d7 * xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents: 1530
diff changeset
8888 if (f->async_iconified)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8889 return;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8890
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
8891 BLOCK_INPUT;
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
8892
13627
8873aa3451dd (XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents: 13598
diff changeset
8893 FRAME_SAMPLE_VISIBILITY (f);
8873aa3451dd (XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents: 13598
diff changeset
8894
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
8895 type = x_icon_type (f);
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
8896 if (!NILP (type))
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
8897 x_bitmap_icon (f, type);
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
8898
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8899 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8900 if (FRAME_GTK_OUTER_WIDGET (f))
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8901 {
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8902 if (! FRAME_VISIBLE_P (f))
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8903 gtk_widget_show_all (FRAME_GTK_OUTER_WIDGET (f));
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8904
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8905 gtk_window_iconify (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)));
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8906 f->iconified = 1;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8907 f->visible = 1;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8908 f->async_iconified = 1;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8909 f->async_visible = 0;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8910 UNBLOCK_INPUT;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8911 return;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8912 }
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8913 #endif
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8914
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8915 #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
8916
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
8917 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
8918 {
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
8919 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
8920 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
8921 /* 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
8922 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
8923 /* 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
8924 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
8925 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
8926 f->iconified = 1;
16753
ab63a77c3a23 (x_iconify_frame): Clear visible when we set iconified.
Richard M. Stallman <rms@gnu.org>
parents: 16491
diff changeset
8927 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
8928 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
8929 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
8930 UNBLOCK_INPUT;
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
8931 return;
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
8932 }
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
8933
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
8934 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
8935 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
8936 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
8937 UNBLOCK_INPUT;
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8938
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8939 if (!result)
7602
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
8940 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
8941
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8942 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
8943 f->async_visible = 0;
ab63a77c3a23 (x_iconify_frame): Clear visible when we set iconified.
Richard M. Stallman <rms@gnu.org>
parents: 16491
diff changeset
8944
5740
48da4ed089e9 (x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents: 5737
diff changeset
8945
48da4ed089e9 (x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents: 5737
diff changeset
8946 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
8947 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
8948 UNBLOCK_INPUT;
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8949 #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
8950
7738
a810335742bb (x_iconify_frame): Call x_set_offset,
Richard M. Stallman <rms@gnu.org>
parents: 7706
diff changeset
8951 /* 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
8952 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
8953 if (! FRAME_VISIBLE_P (f) && !FRAME_ICONIFIED_P (f))
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8954 x_set_offset (f, f->left_pos, f->top_pos, 0);
7738
a810335742bb (x_iconify_frame): Call x_set_offset,
Richard M. Stallman <rms@gnu.org>
parents: 7706
diff changeset
8955
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8956 /* 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
8957 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
8958
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8959 /* 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
8960 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
8961 {
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8962 XEvent message;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
8963
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
8964 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
8965 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
8966 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
8967 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
8968 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
8969
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
8970 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
8971 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
8972 False,
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8973 SubstructureRedirectMask | SubstructureNotifyMask,
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8974 &message))
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8975 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8976 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
8977 error ("Can't notify window manager of iconification");
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8978 }
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8979 }
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8980
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
8981 /* 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
8982 IconicState. */
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8983 x_wm_set_window_state (f, IconicState);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8984
4304
b5014da888a8 (x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents: 4277
diff changeset
8985 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
8986 {
b5014da888a8 (x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents: 4277
diff changeset
8987 /* 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
8988 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
8989 }
b5014da888a8 (x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents: 4277
diff changeset
8990
1658
452ba03935d7 * xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents: 1530
diff changeset
8991 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
8992 f->async_visible = 0;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8993
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
8994 XFlush (FRAME_X_DISPLAY (f));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8995 UNBLOCK_INPUT;
5740
48da4ed089e9 (x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents: 5737
diff changeset
8996 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8997 }
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
8998
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
8999
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9000 /* Free X resources of frame F. */
1810
bf618128d973 * xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents: 1803
diff changeset
9001
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
9002 void
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9003 x_free_frame_resources (f)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
9004 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9005 {
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
9006 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
41837
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
9007 Lisp_Object bar;
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
9008 struct scroll_bar *b;
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
9009
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9010 BLOCK_INPUT;
1810
bf618128d973 * xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents: 1803
diff changeset
9011
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
9012 /* 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
9013 commands to the X server. */
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9014 if (dpyinfo->display)
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9015 {
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9016 if (f->output_data.x->icon_desc)
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
9017 XDestroyWindow (FRAME_X_DISPLAY (f), f->output_data.x->icon_desc);
41837
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
9018
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
9019 #ifdef USE_X_TOOLKIT
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
9020 /* Explicitly destroy the scroll bars of the frame. Without
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
9021 this, we get "BadDrawable" errors from the toolkit later on,
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
9022 presumably from expose events generated for the disappearing
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
9023 toolkit scroll bars. */
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
9024 for (bar = FRAME_SCROLL_BARS (f); !NILP (bar); bar = b->next)
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
9025 {
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
9026 b = XSCROLL_BAR (bar);
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
9027 x_scroll_bar_remove (b);
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
9028 }
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
9029 #endif
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
9030
14830
34db919835d3 (x_destroy_window) [HAVE_X_I18N]: Free xic and xim of frame.
Richard M. Stallman <rms@gnu.org>
parents: 14826
diff changeset
9031 #ifdef HAVE_X_I18N
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9032 if (FRAME_XIC (f))
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
9033 free_frame_xic (f);
14830
34db919835d3 (x_destroy_window) [HAVE_X_I18N]: Free xic and xim of frame.
Richard M. Stallman <rms@gnu.org>
parents: 14826
diff changeset
9034 #endif
41837
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
9035
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9036 #ifdef USE_X_TOOLKIT
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9037 if (f->output_data.x->widget)
37212
5c27e50f91d1 (x_free_frame_resources) [USE_X_TOOLKIT]: Set
Gerd Moellmann <gerd@gnu.org>
parents: 37153
diff changeset
9038 {
5c27e50f91d1 (x_free_frame_resources) [USE_X_TOOLKIT]: Set
Gerd Moellmann <gerd@gnu.org>
parents: 37153
diff changeset
9039 XtDestroyWidget (f->output_data.x->widget);
5c27e50f91d1 (x_free_frame_resources) [USE_X_TOOLKIT]: Set
Gerd Moellmann <gerd@gnu.org>
parents: 37153
diff changeset
9040 f->output_data.x->widget = NULL;
5c27e50f91d1 (x_free_frame_resources) [USE_X_TOOLKIT]: Set
Gerd Moellmann <gerd@gnu.org>
parents: 37153
diff changeset
9041 }
41837
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
9042 /* Tooltips don't have widgets, only a simple X window, even if
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
9043 we are using a toolkit. */
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
9044 else if (FRAME_X_WINDOW (f))
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
9045 XDestroyWindow (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f));
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
9046
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
9047 free_frame_menubar (f);
41837
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
9048 #else /* !USE_X_TOOLKIT */
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9049
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9050 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9051 /* In the GTK version, tooltips are normal X
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9052 frames. We must check and free both types. */
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9053 if (FRAME_GTK_OUTER_WIDGET (f))
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9054 {
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9055 gtk_widget_destroy (FRAME_GTK_OUTER_WIDGET (f));
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9056 FRAME_X_WINDOW (f) = 0; /* Set to avoid XDestroyWindow below */
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9057 FRAME_GTK_OUTER_WIDGET (f) = 0;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9058 }
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9059 #endif /* USE_GTK */
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
9060
41837
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
9061 if (FRAME_X_WINDOW (f))
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
9062 XDestroyWindow (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f));
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
9063 #endif /* !USE_X_TOOLKIT */
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9064
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
9065 unload_color (f, f->output_data.x->foreground_pixel);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
9066 unload_color (f, f->output_data.x->background_pixel);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
9067 unload_color (f, f->output_data.x->cursor_pixel);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
9068 unload_color (f, f->output_data.x->cursor_foreground_pixel);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
9069 unload_color (f, f->output_data.x->border_pixel);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
9070 unload_color (f, f->output_data.x->mouse_pixel);
41837
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
9071
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
9072 if (f->output_data.x->scroll_bar_background_pixel != -1)
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
9073 unload_color (f, f->output_data.x->scroll_bar_background_pixel);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
9074 if (f->output_data.x->scroll_bar_foreground_pixel != -1)
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
9075 unload_color (f, f->output_data.x->scroll_bar_foreground_pixel);
39618
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
9076 #ifdef USE_TOOLKIT_SCROLL_BARS
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
9077 /* Scrollbar shadow colors. */
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
9078 if (f->output_data.x->scroll_bar_top_shadow_pixel != -1)
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
9079 unload_color (f, f->output_data.x->scroll_bar_top_shadow_pixel);
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
9080 if (f->output_data.x->scroll_bar_bottom_shadow_pixel != -1)
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
9081 unload_color (f, f->output_data.x->scroll_bar_bottom_shadow_pixel);
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
9082 #endif /* USE_TOOLKIT_SCROLL_BARS */
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
9083 if (f->output_data.x->white_relief.allocated_p)
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
9084 unload_color (f, f->output_data.x->white_relief.pixel);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
9085 if (f->output_data.x->black_relief.allocated_p)
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
9086 unload_color (f, f->output_data.x->black_relief.pixel);
34318
d302f6935ff8 (x_destroy_window): Call x_free_gcs so that
Gerd Moellmann <gerd@gnu.org>
parents: 34250
diff changeset
9087
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9088 if (FRAME_FACE_CACHE (f))
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9089 free_frame_faces (f);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
9090
34318
d302f6935ff8 (x_destroy_window): Call x_free_gcs so that
Gerd Moellmann <gerd@gnu.org>
parents: 34250
diff changeset
9091 x_free_gcs (f);
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
9092 XFlush (FRAME_X_DISPLAY (f));
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
9093 }
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
9094
17575
3f073536c09a Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17574
diff changeset
9095 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
9096 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
9097
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
9098 xfree (f->output_data.x);
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9099 f->output_data.x = NULL;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
9100
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
9101 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
9102 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
9103 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
9104 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
9105 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
9106 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
9107
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
9108 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
9109 {
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
9110 dpyinfo->mouse_face_beg_row
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
9111 = dpyinfo->mouse_face_beg_col = -1;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
9112 dpyinfo->mouse_face_end_row
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
9113 = dpyinfo->mouse_face_end_col = -1;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
9114 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
9115 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
9116 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
9117 }
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
9118
1810
bf618128d973 * xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents: 1803
diff changeset
9119 UNBLOCK_INPUT;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9120 }
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9121
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9122
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9123 /* Destroy the X window of frame F. */
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9124
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9125 void
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9126 x_destroy_window (f)
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9127 struct frame *f;
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9128 {
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9129 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9130
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9131 /* If a display connection is dead, don't try sending more
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9132 commands to the X server. */
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9133 if (dpyinfo->display != 0)
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9134 x_free_frame_resources (f);
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9135
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9136 dpyinfo->reference_count--;
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9137 }
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9138
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9139
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9140 /* Setting window manager hints. */
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9141
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
9142 /* 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
9143 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
9144 that the window now has.
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
9145 If USER_POSITION is nonzero, we set the USPosition
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9146 flag (this is useful when FLAGS is 0).
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9147 The GTK version is in gtkutils.c */
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9148
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9149 #ifndef USE_GTK
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
9150 void
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
9151 x_wm_set_size_hint (f, flags, user_position)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
9152 struct frame *f;
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
9153 long flags;
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
9154 int user_position;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9155 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9156 XSizeHints size_hints;
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9157
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9158 #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
9159 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
9160 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
9161 Dimension widget_width, widget_height;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9162 #endif
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
9163
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9164 Window window = FRAME_OUTER_WINDOW (f);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9165
7187
ca0102511d80 (x_wm_set_size_hint): Don't set PMaxSize.
Richard M. Stallman <rms@gnu.org>
parents: 7169
diff changeset
9166 /* 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
9167 size_hints.flags = PResizeInc | PMinSize /* | PMaxSize */;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9168
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
9169 size_hints.x = f->left_pos;
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
9170 size_hints.y = f->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
9171
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
9172 #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
9173 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
9174 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
9175 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
9176 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
9177 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
9178 #else /* not USE_X_TOOLKIT */
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
9179 size_hints.height = FRAME_PIXEL_HEIGHT (f);
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
9180 size_hints.width = FRAME_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
9181 #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
9182
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
9183 size_hints.width_inc = FRAME_COLUMN_WIDTH (f);
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
9184 size_hints.height_inc = FRAME_LINE_HEIGHT (f);
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
9185 size_hints.max_width
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
9186 = FRAME_X_DISPLAY_INFO (f)->width - FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, 0);
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
9187 size_hints.max_height
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
9188 = FRAME_X_DISPLAY_INFO (f)->height - FRAME_TEXT_LINES_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
9189
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9190 /* Calculate the base and minimum sizes.
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9191
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9192 (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
9193 Instead we copy the values that the widgets are using, below.) */
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9194 #ifndef USE_X_TOOLKIT
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
9195 {
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
9196 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
9197 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
9198
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
9199 base_width = FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, 0);
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
9200 base_height = FRAME_TEXT_LINES_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
9201
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
9202 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
9203
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
9204 /* 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
9205 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
9206 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
9207 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
9208 zero-row, zero-column frame.
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
9209
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
9210 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
9211 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
9212 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
9213
cd3d59155bf7 * xterm.c (x_wm_set_size_hint): Set the base_width and base_height
Jim Blandy <jimb@redhat.com>
parents: 1077
diff changeset
9214 #ifdef HAVE_X11R4
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
9215 size_hints.flags |= PBaseSize;
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
9216 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
9217 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
9218 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
9219 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
9220 #else
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
9221 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
9222 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
9223 #endif
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
9224 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9225
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9226 /* 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
9227 if (flags)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9228 {
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9229 size_hints.flags |= flags;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9230 goto no_read;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9231 }
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9232 #endif /* not USE_X_TOOLKIT */
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9233
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9234 {
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9235 XSizeHints hints; /* Sometimes I hate X Windows... */
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9236 long supplied_return;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9237 int value;
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
9238
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
9239 #ifdef HAVE_X11R4
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9240 value = XGetWMNormalHints (FRAME_X_DISPLAY (f), window, &hints,
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9241 &supplied_return);
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
9242 #else
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9243 value = XGetNormalHints (FRAME_X_DISPLAY (f), window, &hints);
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9244 #endif
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9245
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9246 #ifdef USE_X_TOOLKIT
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9247 size_hints.base_height = hints.base_height;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9248 size_hints.base_width = hints.base_width;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9249 size_hints.min_height = hints.min_height;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9250 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
9251 #endif
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
9252
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9253 if (flags)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9254 size_hints.flags |= flags;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9255 else
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9256 {
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9257 if (value == 0)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9258 hints.flags = 0;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9259 if (hints.flags & PSize)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9260 size_hints.flags |= PSize;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9261 if (hints.flags & PPosition)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9262 size_hints.flags |= PPosition;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9263 if (hints.flags & USPosition)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9264 size_hints.flags |= USPosition;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9265 if (hints.flags & USSize)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9266 size_hints.flags |= USSize;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9267 }
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9268 }
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9269
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9270 #ifndef USE_X_TOOLKIT
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9271 no_read:
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9272 #endif
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
9273
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
9274 #ifdef PWinGravity
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
9275 size_hints.win_gravity = f->win_gravity;
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
9276 size_hints.flags |= PWinGravity;
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
9277
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
9278 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
9279 {
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
9280 size_hints.flags &= ~ PPosition;
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
9281 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
9282 }
4777
21ed9c9bb210 (w_wn_set_size_hint): Make recent window gravity addition
Brian Fox <bfox@gnu.org>
parents: 4696
diff changeset
9283 #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
9284
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
9285 #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
9286 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
9287 #else
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
9288 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
9289 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9290 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9291 #endif /* not USE_GTK */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9292
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9293 /* Used for IconicState or NormalState */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9294
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
9295 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
9296 x_wm_set_window_state (f, state)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
9297 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9298 int state;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9299 {
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9300 #ifdef USE_X_TOOLKIT
7602
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
9301 Arg al[1];
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
9302
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
9303 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
9304 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
9305 #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
9306 Window window = FRAME_X_WINDOW (f);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9307
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
9308 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
9309 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
9310
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
9311 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
9312 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9313 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9314
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
9315 void
9542
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
9316 x_wm_set_icon_pixmap (f, pixmap_id)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
9317 struct frame *f;
9542
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
9318 int pixmap_id;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9319 {
51897
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
9320 Pixmap icon_pixmap, icon_mask;
15117
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
9321
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9322 #ifndef USE_X_TOOLKIT
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9323 Window window = FRAME_OUTER_WINDOW (f);
7806
ef7a60d59543 (x_wm_set_icon_position, x_wm_set_icon_pixmap):
Richard M. Stallman <rms@gnu.org>
parents: 7801
diff changeset
9324 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9325
9542
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
9326 if (pixmap_id > 0)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
9327 {
15117
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
9328 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
9329 f->output_data.x->wm_hints.icon_pixmap = icon_pixmap;
51897
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
9330 icon_mask = x_bitmap_mask (f, pixmap_id);
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
9331 f->output_data.x->wm_hints.icon_mask = icon_mask;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
9332 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
9333 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
9334 {
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
9335 /* 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
9336 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
9337 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
9338 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
9339 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
9340 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
9341 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
9342 #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
9343 f->output_data.x->wm_hints.icon_pixmap = None;
51897
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
9344 f->output_data.x->wm_hints.icon_mask = None;
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
9345 #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
9346 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
9347 #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
9348 }
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
9349
15117
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
9350 #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
9351
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
9352 {
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
9353 Arg al[1];
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
9354 XtSetArg (al[0], XtNiconPixmap, icon_pixmap);
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
9355 XtSetValues (f->output_data.x->widget, al, 1);
51897
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
9356 XtSetArg (al[0], XtNiconMask, icon_mask);
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
9357 XtSetValues (f->output_data.x->widget, al, 1);
15117
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
9358 }
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
9359
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
9360 #else /* not USE_X_TOOLKIT */
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
9361
51897
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
9362 f->output_data.x->wm_hints.flags |= (IconPixmapHint | IconMaskHint);
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
9363 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
9364
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
9365 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9366 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9367
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
9368 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
9369 x_wm_set_icon_position (f, icon_x, icon_y)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
9370 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9371 int icon_x, icon_y;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9372 {
49644
834df49192b0 Use FRAME_OUTER_WINDOW instead of ifdef X_TOOLKIT/else/endif
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
9373 Window window = FRAME_OUTER_WINDOW (f);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9374
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
9375 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
9376 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
9377 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
9378
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
9379 XSetWMHints (FRAME_X_DISPLAY (f), window, &f->output_data.x->wm_hints);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9380 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9381
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9382
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9383 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9384 Fonts
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9385 ***********************************************************************/
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9386
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9387 /* 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
9388
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9389 struct font_info *
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9390 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
9391 FRAME_PTR f;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9392 int font_idx;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9393 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9394 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
9395 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9396
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9397
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9398 /* Return a list of names of available fonts matching PATTERN on frame F.
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9399
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9400 If SIZE is > 0, it is the size (maximum bounds width) of fonts
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9401 to be listed.
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9402
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9403 SIZE < 0 means include scalable fonts.
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9404
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9405 Frame F null means we have not yet created any frame on X, and
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9406 consult the first display in x_display_list. MAXNAMES sets a limit
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9407 on how many fonts to match. */
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9408
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9409 Lisp_Object
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9410 x_list_fonts (f, pattern, size, maxnames)
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9411 struct frame *f;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9412 Lisp_Object pattern;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9413 int size;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9414 int maxnames;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9415 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9416 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
9417 Lisp_Object tem, second_best;
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9418 struct x_display_info *dpyinfo
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9419 = f ? FRAME_X_DISPLAY_INFO (f) : x_display_list;
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9420 Display *dpy = dpyinfo->display;
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
9421 int try_XLoadQueryFont = 0;
24633
c7d905dca6ba (x_list_fonts): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 24618
diff changeset
9422 int count;
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9423 int allow_scalable_fonts_p = 0;
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9424
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9425 if (size < 0)
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9426 {
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9427 allow_scalable_fonts_p = 1;
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9428 size = 0;
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9429 }
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9430
19447
34099ec680df (x_list_fonts): Adjusted for the name change of
Kenichi Handa <handa@m17n.org>
parents: 19276
diff changeset
9431 patterns = Fassoc (pattern, Valternate_fontname_alist);
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
9432 if (NILP (patterns))
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
9433 patterns = Fcons (pattern, Qnil);
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
9434
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
9435 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
9436 /* 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
9437 try_XLoadQueryFont = 1;
19062
9cc02044117d (x_list_fonts): Request at least 10 fonts by XListFonts.
Kenichi Handa <handa@m17n.org>
parents: 19060
diff changeset
9438
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9439 for (; CONSP (patterns); patterns = XCDR (patterns))
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9440 {
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9441 int num_fonts;
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
9442 char **names = NULL;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9443
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9444 pattern = XCAR (patterns);
19060
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
9445 /* 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
9446 The cache is an alist of the form:
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9447 ((((PATTERN . MAXNAMES) . SCALABLE) (FONTNAME . WIDTH) ...) ...) */
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9448 tem = XCDR (dpyinfo->name_list_element);
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9449 key = Fcons (Fcons (pattern, make_number (maxnames)),
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9450 allow_scalable_fonts_p ? Qt : Qnil);
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9451 list = Fassoc (key, tem);
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9452 if (!NILP (list))
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9453 {
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9454 list = Fcdr_safe (list);
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9455 /* 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
9456 goto label_cached;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9457 }
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9458
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9459 /* 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
9460
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9461 BLOCK_INPUT;
24618
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9462 count = x_catch_errors (dpy);
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9463
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
9464 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
9465 {
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
9466 XFontStruct *font;
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
9467 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
9468
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
9469 font = XLoadQueryFont (dpy, SDATA (pattern));
24618
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9470 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
9471 {
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9472 /* 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
9473 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
9474 font = NULL;
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9475 x_clear_errors (dpy);
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9476 }
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9477
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
9478 if (font
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
9479 && 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
9480 {
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
9481 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
9482 int len = strlen (name);
22530
6d2e22a16952 (x_list_fonts): Keep alloca usage simple.
Karl Heuer <kwzh@gnu.org>
parents: 22522
diff changeset
9483 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
9484
23095
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
9485 /* 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
9486 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
9487 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
9488 if (len == 0)
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
9489 try_XLoadQueryFont = 0;
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
9490 else
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
9491 {
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
9492 num_fonts = 1;
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
9493 names = (char **) alloca (sizeof (char *));
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
9494 /* 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
9495 simple var. */
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
9496 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
9497 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
9498 XFree (name);
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
9499 }
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
9500 }
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
9501 else
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
9502 try_XLoadQueryFont = 0;
22943
5493321d4526 (x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 22907
diff changeset
9503
5493321d4526 (x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 22907
diff changeset
9504 if (font)
5493321d4526 (x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 22907
diff changeset
9505 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
9506 }
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
9507
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
9508 if (!try_XLoadQueryFont)
24618
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9509 {
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9510 /* 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
9511 auto-scaled fonts at the head. */
49859
c6bacc76cfb6 * xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Djärv <jan.h.d@swipnet.se>
parents: 49651
diff changeset
9512 if (maxnames < 0)
c6bacc76cfb6 * xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Djärv <jan.h.d@swipnet.se>
parents: 49651
diff changeset
9513 {
c6bacc76cfb6 * xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Djärv <jan.h.d@swipnet.se>
parents: 49651
diff changeset
9514 int limit;
c6bacc76cfb6 * xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Djärv <jan.h.d@swipnet.se>
parents: 49651
diff changeset
9515
c6bacc76cfb6 * xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Djärv <jan.h.d@swipnet.se>
parents: 49651
diff changeset
9516 for (limit = 500;;)
c6bacc76cfb6 * xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Djärv <jan.h.d@swipnet.se>
parents: 49651
diff changeset
9517 {
c6bacc76cfb6 * xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Djärv <jan.h.d@swipnet.se>
parents: 49651
diff changeset
9518 names = XListFonts (dpy, SDATA (pattern), limit, &num_fonts);
c6bacc76cfb6 * xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Djärv <jan.h.d@swipnet.se>
parents: 49651
diff changeset
9519 if (num_fonts == limit)
c6bacc76cfb6 * xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Djärv <jan.h.d@swipnet.se>
parents: 49651
diff changeset
9520 {
c6bacc76cfb6 * xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Djärv <jan.h.d@swipnet.se>
parents: 49651
diff changeset
9521 BLOCK_INPUT;
c6bacc76cfb6 * xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Djärv <jan.h.d@swipnet.se>
parents: 49651
diff changeset
9522 XFreeFontNames (names);
c6bacc76cfb6 * xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Djärv <jan.h.d@swipnet.se>
parents: 49651
diff changeset
9523 UNBLOCK_INPUT;
c6bacc76cfb6 * xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Djärv <jan.h.d@swipnet.se>
parents: 49651
diff changeset
9524 limit *= 2;
c6bacc76cfb6 * xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Djärv <jan.h.d@swipnet.se>
parents: 49651
diff changeset
9525 }
c6bacc76cfb6 * xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Djärv <jan.h.d@swipnet.se>
parents: 49651
diff changeset
9526 else
c6bacc76cfb6 * xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Djärv <jan.h.d@swipnet.se>
parents: 49651
diff changeset
9527 break;
c6bacc76cfb6 * xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Djärv <jan.h.d@swipnet.se>
parents: 49651
diff changeset
9528 }
c6bacc76cfb6 * xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Djärv <jan.h.d@swipnet.se>
parents: 49651
diff changeset
9529 }
c6bacc76cfb6 * xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Djärv <jan.h.d@swipnet.se>
parents: 49651
diff changeset
9530 else
c6bacc76cfb6 * xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Djärv <jan.h.d@swipnet.se>
parents: 49651
diff changeset
9531 names = XListFonts (dpy, SDATA (pattern), max (maxnames, 10),
c6bacc76cfb6 * xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Djärv <jan.h.d@swipnet.se>
parents: 49651
diff changeset
9532 &num_fonts);
c6bacc76cfb6 * xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Djärv <jan.h.d@swipnet.se>
parents: 49651
diff changeset
9533
24618
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9534 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
9535 {
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9536 /* 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
9537 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
9538 names = NULL;
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9539 x_clear_errors (dpy);
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9540 }
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9541 }
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9542
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9543 x_uncatch_errors (dpy, count);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9544 UNBLOCK_INPUT;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9545
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9546 if (names)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9547 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9548 int i;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9549
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9550 /* 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
9551 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
9552 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
9553 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9554 int width = 0;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9555 char *p = names[i];
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9556 int average_width = -1, dashes = 0;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
9557
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9558 /* Count the number of dashes in NAMES[I]. If there are
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9559 14 dashes, and the field value following 12th dash
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9560 (AVERAGE_WIDTH) is 0, this is a auto-scaled font which
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9561 is usually too ugly to be used for editing. Let's
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9562 ignore it. */
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9563 while (*p)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9564 if (*p++ == '-')
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9565 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9566 dashes++;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9567 if (dashes == 7) /* PIXEL_SIZE field */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9568 width = atoi (p);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9569 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
9570 average_width = atoi (p);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9571 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
9572
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9573 if (allow_scalable_fonts_p
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9574 || dashes < 14 || average_width != 0)
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9575 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9576 tem = build_string (names[i]);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9577 if (NILP (Fassoc (tem, list)))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9578 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9579 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
9580 && ((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
9581 (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
9582 >= 0))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9583 /* 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
9584 width of this font. */
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9585 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
9586 else
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9587 /* 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
9588 list = Fcons (Fcons (tem, Qnil), list);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9589 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9590 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9591 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
9592
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
9593 if (!try_XLoadQueryFont)
38246
b93fb0eb254d (x_list_fonts): Make sure XFreeFont is called
Gerd Moellmann <gerd@gnu.org>
parents: 38094
diff changeset
9594 {
b93fb0eb254d (x_list_fonts): Make sure XFreeFont is called
Gerd Moellmann <gerd@gnu.org>
parents: 38094
diff changeset
9595 BLOCK_INPUT;
b93fb0eb254d (x_list_fonts): Make sure XFreeFont is called
Gerd Moellmann <gerd@gnu.org>
parents: 38094
diff changeset
9596 XFreeFontNames (names);
b93fb0eb254d (x_list_fonts): Make sure XFreeFont is called
Gerd Moellmann <gerd@gnu.org>
parents: 38094
diff changeset
9597 UNBLOCK_INPUT;
b93fb0eb254d (x_list_fonts): Make sure XFreeFont is called
Gerd Moellmann <gerd@gnu.org>
parents: 38094
diff changeset
9598 }
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9599 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9600
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9601 /* Now store the result in the cache. */
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39950
diff changeset
9602 XSETCDR (dpyinfo->name_list_element,
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39950
diff changeset
9603 Fcons (Fcons (key, list), XCDR (dpyinfo->name_list_element)));
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9604
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9605 label_cached:
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9606 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
9607
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9608 newlist = second_best = Qnil;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9609 /* Make a list of the fonts that have the right width. */
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9610 for (; CONSP (list); list = XCDR (list))
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9611 {
19060
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
9612 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
9613
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9614 tem = XCAR (list);
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9615
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9616 if (!CONSP (tem) || NILP (XCAR (tem)))
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9617 continue;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9618 if (!size)
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9619 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9620 newlist = Fcons (XCAR (tem), newlist);
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9621 continue;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9622 }
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9623
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9624 if (!INTEGERP (XCDR (tem)))
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9625 {
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9626 /* Since we have not yet known the size of this font, we
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9627 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
9628 XFontStruct *thisinfo;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9629
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9630 BLOCK_INPUT;
24618
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9631 count = x_catch_errors (dpy);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9632 thisinfo = XLoadQueryFont (dpy,
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
9633 SDATA (XCAR (tem)));
24618
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9634 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
9635 {
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9636 /* 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
9637 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
9638 thisinfo = NULL;
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9639 x_clear_errors (dpy);
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9640 }
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9641 x_uncatch_errors (dpy, count);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9642 UNBLOCK_INPUT;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9643
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9644 if (thisinfo)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9645 {
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39950
diff changeset
9646 XSETCDR (tem,
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39950
diff changeset
9647 (thisinfo->min_bounds.width == 0
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39950
diff changeset
9648 ? make_number (0)
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39950
diff changeset
9649 : make_number (thisinfo->max_bounds.width)));
38246
b93fb0eb254d (x_list_fonts): Make sure XFreeFont is called
Gerd Moellmann <gerd@gnu.org>
parents: 38094
diff changeset
9650 BLOCK_INPUT;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9651 XFreeFont (dpy, thisinfo);
38246
b93fb0eb254d (x_list_fonts): Make sure XFreeFont is called
Gerd Moellmann <gerd@gnu.org>
parents: 38094
diff changeset
9652 UNBLOCK_INPUT;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9653 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9654 else
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9655 /* 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
9656 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
9657 as 0 not to try to open it again. */
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39950
diff changeset
9658 XSETCDR (tem, make_number (0));
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9659 }
19060
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
9660
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9661 found_size = XINT (XCDR (tem));
19060
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
9662 if (found_size == size)
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9663 newlist = Fcons (XCAR (tem), newlist);
19060
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
9664 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
9665 {
19060
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
9666 if (NILP (second_best))
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9667 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
9668 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
9669 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9670 if (XINT (XCDR (second_best)) > size
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9671 || XINT (XCDR (second_best)) < found_size)
19060
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
9672 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
9673 }
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
9674 else
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
9675 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9676 if (XINT (XCDR (second_best)) > size
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9677 && XINT (XCDR (second_best)) > found_size)
19060
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
9678 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
9679 }
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9680 }
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9681 }
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9682 if (!NILP (newlist))
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9683 break;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9684 else if (!NILP (second_best))
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9685 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9686 newlist = Fcons (XCAR (second_best), Qnil);
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9687 break;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9688 }
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9689 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9690
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9691 return newlist;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
9692 }
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9693
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9694
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9695 #if GLYPH_DEBUG
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9696
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9697 /* 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
9698 font table. */
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 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9701 x_check_font (f, font)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9702 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9703 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9704 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9705 int i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9706 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
9707
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9708 xassert (font != NULL);
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 for (i = 0; i < dpyinfo->n_fonts; i++)
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
9711 if (dpyinfo->font_table[i].name
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9712 && font == dpyinfo->font_table[i].font)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9713 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9714
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9715 xassert (i < dpyinfo->n_fonts);
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9718 #endif /* GLYPH_DEBUG != 0 */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9719
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9720 /* 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
9721 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
9722 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
9723 "-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
9724 have font->min_bounds.width == 0. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9725
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9726 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9727 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
9728 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9729 int *w, *h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9730 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9731 *h = FONT_HEIGHT (font);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9732 *w = font->min_bounds.width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9733
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9734 /* 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
9735 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
9736 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
9737 if (*w <= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9738 *w = font->max_bounds.width;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9742 /* 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
9743 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
9744 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
9745 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
9746 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
9747
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9748 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9749 x_compute_min_glyph_bounds (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9750 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9751 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9752 int i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9753 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
9754 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9755 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
9756 int old_height = dpyinfo->smallest_font_height;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
9757
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9758 dpyinfo->smallest_font_height = 100000;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9759 dpyinfo->smallest_char_width = 100000;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
9760
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9761 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
9762 if (dpyinfo->font_table[i].name)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9763 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9764 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
9765 int w, h;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
9766
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9767 font = (XFontStruct *) fontp->font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9768 xassert (font != (XFontStruct *) ~0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9769 x_font_min_bounds (font, &w, &h);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
9770
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9771 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
9772 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
9773 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9774
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9775 xassert (dpyinfo->smallest_char_width > 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9776 && dpyinfo->smallest_font_height > 0);
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 return (dpyinfo->n_fonts == 1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9779 || dpyinfo->smallest_char_width < old_width
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9780 || dpyinfo->smallest_font_height < old_height);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9781 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9782
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9783
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9784 /* 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
9785 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
9786 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
9787 If loading is failed, return NULL. */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9788
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9789 struct font_info *
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9790 x_load_font (f, fontname, size)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9791 struct frame *f;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9792 register char *fontname;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9793 int size;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9794 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9795 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
9796 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
9797 int count;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9798
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9799 /* 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
9800 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
9801 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
9802 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
9803
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9804 if (!NILP (font_names))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9805 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9806 Lisp_Object tail;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9807 int i;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9808
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9809 for (i = 0; i < dpyinfo->n_fonts; i++)
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9810 for (tail = font_names; CONSP (tail); tail = XCDR (tail))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9811 if (dpyinfo->font_table[i].name
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9812 && (!strcmp (dpyinfo->font_table[i].name,
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
9813 SDATA (XCAR (tail)))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9814 || !strcmp (dpyinfo->font_table[i].full_name,
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
9815 SDATA (XCAR (tail)))))
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9816 return (dpyinfo->font_table + i);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9817 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9818
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9819 /* 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
9820 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9821 char *full_name;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9822 XFontStruct *font;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9823 struct font_info *fontp;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9824 unsigned long value;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9825 int i;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9826
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
9827 /* 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
9828 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
9829 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
9830 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
9831 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
9832 if (size > 0 && !NILP (font_names))
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
9833 fontname = (char *) SDATA (XCAR (font_names));
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9834
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9835 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
9836 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
9837 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
9838 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
9839 {
d4ee4399e999 (x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24224
diff changeset
9840 /* 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
9841 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
9842 font = NULL;
d4ee4399e999 (x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24224
diff changeset
9843 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
9844 }
d4ee4399e999 (x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24224
diff changeset
9845 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
9846 UNBLOCK_INPUT;
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9847 if (!font)
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9848 return NULL;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9849
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9850 /* 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
9851 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
9852 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
9853 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9854
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9855 /* 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
9856 if (i == dpyinfo->n_fonts
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9857 && 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
9858 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9859 int sz;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9860 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
9861 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
9862 dpyinfo->font_table
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9863 = (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
9864 }
24991
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 fontp = dpyinfo->font_table + i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9867 if (i == dpyinfo->n_fonts)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9868 ++dpyinfo->n_fonts;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9869
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9870 /* 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
9871 BLOCK_INPUT;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9872 fontp->font = font;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9873 fontp->font_idx = i;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9874 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
9875 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
9876
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9877 /* 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
9878 full_name = 0;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9879 if (XGetFontProperty (font, XA_FONT, &value))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9880 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9881 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
9882 char *p = name;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9883 int dashes = 0;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9884
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9885 /* 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
9886 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
9887 so don't use it.
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9888 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
9889 stored in them. */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9890 while (*p)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9891 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9892 if (*p == '-')
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9893 dashes++;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9894 p++;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9895 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9896
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9897 if (dashes >= 13)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9898 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9899 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
9900 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
9901 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9902
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9903 XFree (name);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9904 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
9905
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9906 if (full_name != 0)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9907 fontp->full_name = full_name;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9908 else
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9909 fontp->full_name = fontp->name;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9910
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9911 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
9912 fontp->height = FONT_HEIGHT (font);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9913
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
9914 if (NILP (font_names))
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
9915 {
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
9916 /* 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
9917 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
9918 the cache for x_list_fonts. */
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
9919 Lisp_Object lispy_name = build_string (fontname);
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
9920 Lisp_Object lispy_full_name = build_string (fontp->full_name);
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9921 Lisp_Object key = Fcons (Fcons (lispy_name, make_number (256)),
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9922 Qnil);
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
9923
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39950
diff changeset
9924 XSETCDR (dpyinfo->name_list_element,
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39950
diff changeset
9925 Fcons (Fcons (key,
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39950
diff changeset
9926 Fcons (Fcons (lispy_full_name,
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39950
diff changeset
9927 make_number (fontp->size)),
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39950
diff changeset
9928 Qnil)),
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39950
diff changeset
9929 XCDR (dpyinfo->name_list_element)));
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
9930 if (full_name)
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9931 {
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9932 key = Fcons (Fcons (lispy_full_name, make_number (256)),
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9933 Qnil);
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39950
diff changeset
9934 XSETCDR (dpyinfo->name_list_element,
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39950
diff changeset
9935 Fcons (Fcons (key,
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39950
diff changeset
9936 Fcons (Fcons (lispy_full_name,
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39950
diff changeset
9937 make_number (fontp->size)),
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39950
diff changeset
9938 Qnil)),
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39950
diff changeset
9939 XCDR (dpyinfo->name_list_element)));
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9940 }
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
9941 }
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
9942
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9943 /* 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
9944 code-points (0x20..0x7F or 0x2020..0x7F7F) of each charset to
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
9945 the font code-points (0:0x20..0x7F, 1:0xA0..0xFF), or
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
9946 (0:0x2020..0x7F7F, 1:0xA0A0..0xFFFF, 3:0x20A0..0x7FFF,
18057
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
9947 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
9948 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
9949 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
9950 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
9951 fontp->encoding[1]
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9952 = (font->max_byte1 == 0
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9953 /* 1-byte font */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9954 ? (font->min_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9955 ? (font->max_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9956 ? 0 /* 0x20..0x7F */
18057
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
9957 : 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
9958 : 1) /* 0xA0..0xFF */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9959 /* 2-byte font */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9960 : (font->min_byte1 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9961 ? (font->max_byte1 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9962 ? (font->min_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9963 ? (font->max_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9964 ? 0 /* 0x2020..0x7F7F */
18057
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
9965 : 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
9966 : 3) /* 0x20A0..0x7FFF */
18057
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
9967 : 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
9968 : (font->min_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9969 ? (font->max_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9970 ? 2 /* 0xA020..0xFF7F */
18057
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
9971 : 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
9972 : 1))); /* 0xA0A0..0xFFFF */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9973
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9974 fontp->baseline_offset
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9975 = (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
9976 ? (long) value : 0);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9977 fontp->relative_compose
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9978 = (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
9979 ? (long) value : 0);
17103
7cde34a6424e (dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents: 17050
diff changeset
9980 fontp->default_ascent
7cde34a6424e (dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents: 17050
diff changeset
9981 = (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
9982 ? (long) value : 0);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9983
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9984 /* 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
9985 has a character with a smaller width than any other character
42688
21f5612addbb (x_load_font): Never set fonts_changed_p to zero.
Andreas Schwab <schwab@suse.de>
parents: 42675
diff changeset
9986 before, or if the font loaded has a smaller height than any
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9987 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
9988 glyph matrix reallocation necessary. */
42688
21f5612addbb (x_load_font): Never set fonts_changed_p to zero.
Andreas Schwab <schwab@suse.de>
parents: 42675
diff changeset
9989 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
9990 UNBLOCK_INPUT;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9991 return fontp;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9992 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9993 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9994
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9995
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9996 /* 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
9997 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
9998
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9999 struct font_info *
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10000 x_query_font (f, fontname)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10001 struct frame *f;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10002 register char *fontname;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10003 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10004 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
10005 int i;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10006
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10007 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
10008 if (dpyinfo->font_table[i].name
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10009 && (!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
10010 || !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
10011 return (dpyinfo->font_table + i);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10012 return NULL;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10013 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10014
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10015
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10016 /* 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
10017 `encoder' of the structure. */
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
10018
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
10019 void
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
10020 x_find_ccl_program (fontp)
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
10021 struct font_info *fontp;
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
10022 {
25068
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
10023 Lisp_Object list, elt;
21548
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
10024
31694
97c48afc4c5a (x_draw_image_glyph_string): Remove a comment describing
Gerd Moellmann <gerd@gnu.org>
parents: 31614
diff changeset
10025 elt = Qnil;
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
10026 for (list = Vfont_ccl_encoder_alist; CONSP (list); list = XCDR (list))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
10027 {
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
10028 elt = XCAR (list);
21548
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
10029 if (CONSP (elt)
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
10030 && STRINGP (XCAR (elt))
32640
9adbb2160f48 (x_find_ccl_program): Check also fontp->full_name.
Kenichi Handa <handa@m17n.org>
parents: 32607
diff changeset
10031 && ((fast_c_string_match_ignore_case (XCAR (elt), fontp->name)
9adbb2160f48 (x_find_ccl_program): Check also fontp->full_name.
Kenichi Handa <handa@m17n.org>
parents: 32607
diff changeset
10032 >= 0)
9adbb2160f48 (x_find_ccl_program): Check also fontp->full_name.
Kenichi Handa <handa@m17n.org>
parents: 32607
diff changeset
10033 || (fast_c_string_match_ignore_case (XCAR (elt), fontp->full_name)
9adbb2160f48 (x_find_ccl_program): Check also fontp->full_name.
Kenichi Handa <handa@m17n.org>
parents: 32607
diff changeset
10034 >= 0)))
25068
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
10035 break;
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
10036 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10037
25068
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
10038 if (! NILP (list))
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
10039 {
25085
23813e3a69b8 (x_find_ccl_program): Add casting.
Kenichi Handa <handa@m17n.org>
parents: 25083
diff changeset
10040 struct ccl_program *ccl
23813e3a69b8 (x_find_ccl_program): Add casting.
Kenichi Handa <handa@m17n.org>
parents: 25083
diff changeset
10041 = (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
10042
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
10043 if (setup_ccl_program (ccl, XCDR (elt)) < 0)
25068
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
10044 xfree (ccl);
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
10045 else
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
10046 fontp->font_encoder = ccl;
21548
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
10047 }
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
10048 }
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
10049
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10050
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10051
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10052 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10053 Initialization
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10054 ***********************************************************************/
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
10055
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10056 #ifdef USE_X_TOOLKIT
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10057 static XrmOptionDescRec emacs_options[] = {
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10058 {"-geometry", ".geometry", XrmoptionSepArg, NULL},
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10059 {"-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
10060
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10061 {"-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
10062 XrmoptionSepArg, NULL},
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10063 {"-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
10064
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10065 {"-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
10066 {"-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
10067 {"-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
10068 {"-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
10069 {"-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
10070 {"-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
10071 {"-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
10072 };
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10073 #endif /* USE_X_TOOLKIT */
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10074
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10075 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
10076
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10077 #ifdef MULTI_KBOARD
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10078 /* 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
10079 the screen number from the server number. */
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10080 static int
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10081 same_x_server (name1, name2)
46479
4729f849c572 (same_x_server): String pointer args now point to
Ken Raeburn <raeburn@raeburn.org>
parents: 46435
diff changeset
10082 const char *name1, *name2;
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10083 {
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10084 int seen_colon = 0;
46479
4729f849c572 (same_x_server): String pointer args now point to
Ken Raeburn <raeburn@raeburn.org>
parents: 46435
diff changeset
10085 const unsigned char *system_name = SDATA (Vsystem_name);
24164
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
10086 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
10087 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
10088
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
10089 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
10090 && 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
10091 length_until_period++;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
10092
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
10093 /* 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
10094 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
10095 name1 += 4;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
10096 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
10097 name2 += 4;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
10098 /* 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
10099 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
10100 && name1[system_name_length] == ':')
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
10101 name1 += system_name_length;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
10102 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
10103 && name2[system_name_length] == ':')
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
10104 name2 += system_name_length;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
10105 /* 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
10106 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
10107 && name1[length_until_period] == ':')
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
10108 name1 += length_until_period;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
10109 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
10110 && name2[length_until_period] == ':')
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
10111 name2 += length_until_period;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
10112
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10113 for (; *name1 != '\0' && *name1 == *name2; name1++, name2++)
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10114 {
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10115 if (*name1 == ':')
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10116 seen_colon++;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10117 if (seen_colon && *name1 == '.')
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10118 return 1;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10119 }
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10120 return (seen_colon
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10121 && (*name1 == '.' || *name1 == '\0')
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10122 && (*name2 == '.' || *name2 == '\0'));
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10123 }
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10124 #endif
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10125
52387
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10126 /* Count number of set bits in mask and number of bits to shift to
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10127 get to the first bit. With MASK 0x7e0, *BITS is set to 6, and *OFFSET
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10128 to 5. */
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10129 static void
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10130 get_bits_and_offset (mask, bits, offset)
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10131 unsigned long mask;
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10132 int *bits;
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10133 int *offset;
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10134 {
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10135 int nr = 0;
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10136 int off = 0;
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10137
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10138 while (!(mask & 1))
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10139 {
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10140 off++;
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10141 mask >>= 1;
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10142 }
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10143
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10144 while (mask & 1)
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10145 {
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10146 nr++;
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10147 mask >>= 1;
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10148 }
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10149
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10150 *offset = off;
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10151 *bits = nr;
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10152 }
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10153
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
10154 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
10155 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
10156 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
10157 char *xrm_option;
10e818a0248a (x_term_init): New args xrm_option and resource_string.
Richard M. Stallman <rms@gnu.org>
parents: 7738
diff changeset
10158 char *resource_name;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10159 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
10160 int connection;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10161 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
10162 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
10163 XrmDatabase xrdb;
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
10164
11997
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
10165 BLOCK_INPUT;
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
10166
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10167 if (!x_initialized)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10168 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10169 x_initialize ();
52298
1a4bd2bec861 Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents: 52258
diff changeset
10170 ++x_initialized;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10171 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10172
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10173 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10174 {
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10175 #define NUM_ARGV 10
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10176 int argc;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10177 char *argv[NUM_ARGV];
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10178 char **argv2 = argv;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10179 GdkAtom atom;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10180
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10181 /* GTK 2.0 can only handle one display, GTK 2.2 can handle more
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10182 than one, but this remains to be implemented. */
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10183 if (x_initialized > 1)
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10184 return 0;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10185
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10186 for (argc = 0; argc < NUM_ARGV; ++argc)
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10187 argv[argc] = 0;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10188
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10189 argc = 0;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10190 argv[argc++] = initial_argv[0];
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10191
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10192 if (! NILP (display_name))
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10193 {
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10194 argv[argc++] = "--display";
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10195 argv[argc++] = SDATA (display_name);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10196 }
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10197
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10198 argv[argc++] = "--name";
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10199 argv[argc++] = resource_name;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
10200
49434
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
10201 #ifdef HAVE_X11R5
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
10202 XSetLocaleModifiers ("");
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
10203 #endif
a4d0ee33dcce Fix input methods for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
10204
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10205 gtk_init (&argc, &argv2);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10206
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10207 /* gtk_init does set_locale. We must fix locale after calling it. */
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10208 fixup_locale ();
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10209 xg_initialize ();
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10210
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10211 dpy = GDK_DISPLAY ();
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
10212
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10213 /* NULL window -> events for all windows go to our function */
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10214 gdk_window_add_filter (NULL, event_handler_gdk, NULL);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10215
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10216 /* Load our own gtkrc if it exists. */
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10217 {
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10218 struct gcpro gcpro1, gcpro2;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10219 char *file = "~/.emacs.d/gtkrc";
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10220 Lisp_Object s, abs_file;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10221
50103
2e253c47d904 (x_term_init) [USE_GTK]: Fix typo.
Andreas Schwab <schwab@suse.de>
parents: 50097
diff changeset
10222 GCPRO2 (s, abs_file);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10223 s = make_string (file, strlen (file));
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10224 abs_file = Fexpand_file_name(s, Qnil);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10225
52258
280be897db0d Revision: miles@gnu.org--gnu-2003/emacs--cvs-trunk--0--patch-20
Miles Bader <miles@gnu.org>
parents: 52095
diff changeset
10226 if (! NILP (abs_file) && !NILP (Ffile_readable_p (abs_file)))
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10227 gtk_rc_parse (SDATA (abs_file));
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
10228
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10229 UNGCPRO;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10230 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
10231
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10232 XSetErrorHandler (x_error_handler);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10233 XSetIOErrorHandler (x_io_error_quitter);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10234 }
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10235 #else /* not USE_GTK */
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10236 #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
10237 /* 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
10238 errors with X11R5:
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
10239 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
10240 on protocol request 18skiloaf.
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
10241 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
10242 #ifdef HAVE_X11XTR6
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
10243 XtSetLanguageProc (NULL, NULL, NULL);
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
10244 #endif
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
10245
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10246 {
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10247 int argc = 0;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10248 char *argv[3];
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10249
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10250 argv[0] = "";
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10251 argc = 1;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10252 if (xrm_option)
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10253 {
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10254 argv[argc++] = "-xrm";
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10255 argv[argc++] = xrm_option;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10256 }
48169
d2c93bc1faf1 (x_term_init): Use turn_on_atimers, not start_polling and stop_polling.
Richard M. Stallman <rms@gnu.org>
parents: 48145
diff changeset
10257 turn_on_atimers (0);
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
10258 dpy = XtOpenDisplay (Xt_app_con, SDATA (display_name),
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10259 resource_name, EMACS_CLASS,
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10260 emacs_options, XtNumber (emacs_options),
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10261 &argc, argv);
48169
d2c93bc1faf1 (x_term_init): Use turn_on_atimers, not start_polling and stop_polling.
Richard M. Stallman <rms@gnu.org>
parents: 48145
diff changeset
10262 turn_on_atimers (1);
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
10263
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
10264 #ifdef HAVE_X11XTR6
14963
6ac4f300f9b4 Include locale.h if HAVE_SETLOCALE.
Richard M. Stallman <rms@gnu.org>
parents: 14946
diff changeset
10265 /* 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
10266 fixup_locale ();
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
10267 #endif
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10268 }
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10269
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10270 #else /* not USE_X_TOOLKIT */
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
10271 #ifdef HAVE_X11R5
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
10272 XSetLocaleModifiers ("");
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
10273 #endif
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
10274 dpy = XOpenDisplay (SDATA (display_name));
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10275 #endif /* not USE_X_TOOLKIT */
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10276 #endif /* not USE_GTK*/
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
10277
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10278 /* Detect failure. */
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10279 if (dpy == 0)
11997
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
10280 {
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
10281 UNBLOCK_INPUT;
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
10282 return 0;
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
10283 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10284
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10285 /* 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
10286
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10287 dpyinfo = (struct x_display_info *) xmalloc (sizeof (struct x_display_info));
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
10288 bzero (dpyinfo, sizeof *dpyinfo);
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10289
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10290 #ifdef MULTI_KBOARD
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10291 {
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10292 struct x_display_info *share;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10293 Lisp_Object tail;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10294
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10295 for (share = x_display_list, tail = x_display_name_list; share;
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
10296 share = share->next, tail = XCDR (tail))
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
10297 if (same_x_server (SDATA (XCAR (XCAR (tail))),
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
10298 SDATA (display_name)))
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10299 break;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10300 if (share)
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10301 dpyinfo->kboard = share->kboard;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10302 else
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10303 {
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10304 dpyinfo->kboard = (KBOARD *) xmalloc (sizeof (KBOARD));
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10305 init_kboard (dpyinfo->kboard);
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
10306 if (!EQ (XSYMBOL (Qvendor_specific_keysyms)->function, Qunbound))
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
10307 {
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
10308 char *vendor = ServerVendor (dpy);
28307
1d4a11a5f39d (x_term_init): Unblock input around call1.
Gerd Moellmann <gerd@gnu.org>
parents: 28281
diff changeset
10309 UNBLOCK_INPUT;
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
10310 dpyinfo->kboard->Vsystem_key_alist
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
10311 = call1 (Qvendor_specific_keysyms,
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
10312 build_string (vendor ? vendor : ""));
28307
1d4a11a5f39d (x_term_init): Unblock input around call1.
Gerd Moellmann <gerd@gnu.org>
parents: 28281
diff changeset
10313 BLOCK_INPUT;
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
10314 }
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
10315
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10316 dpyinfo->kboard->next_kboard = all_kboards;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10317 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
10318 /* 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
10319 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
10320 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
10321 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
10322 current_kboard = dpyinfo->kboard;
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10323 }
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10324 dpyinfo->kboard->reference_count++;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10325 }
10652
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
10326 #endif
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
10327
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10328 /* 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
10329 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
10330 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
10331
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10332 /* Put it on x_display_name_list as well, to keep them parallel. */
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10333 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
10334 x_display_name_list);
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
10335 dpyinfo->name_list_element = XCAR (x_display_name_list);
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10336
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10337 dpyinfo->display = dpy;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10338
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10339 #if 0
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10340 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
10341 #endif /* ! 0 */
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10342
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10343 dpyinfo->x_id_name
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
10344 = (char *) xmalloc (SBYTES (Vinvocation_name)
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
10345 + SBYTES (Vsystem_name)
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10346 + 2);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10347 sprintf (dpyinfo->x_id_name, "%s@%s",
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
10348 SDATA (Vinvocation_name), SDATA (Vsystem_name));
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
10349
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
10350 /* 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
10351 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
10352
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
10353 /* 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
10354 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
10355 = 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
10356
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
10357 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
10358 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
10359 #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
10360 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
10361 #else
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
10362 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
10363 #endif
11162
95b70c82ec51 (x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents: 11122
diff changeset
10364 /* 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
10365 all versions. */
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10366 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
10367
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
10368 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
10369 DefaultScreen (dpyinfo->display));
27991
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
10370 select_visual (dpyinfo);
27985
4ba445af210b (x_term_init): Set Colormap member of x_display_info
Gerd Moellmann <gerd@gnu.org>
parents: 27974
diff changeset
10371 dpyinfo->cmap = DefaultColormapOfScreen (dpyinfo->screen);
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
10372 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
10373 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
10374 dpyinfo->root_window = RootWindowOfScreen (dpyinfo->screen);
52298
1a4bd2bec861 Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents: 52258
diff changeset
10375 dpyinfo->client_leader_window = 0;
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
10376 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
10377 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
10378 dpyinfo->icon_bitmap_id = -1;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10379 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
10380 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
10381 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
10382 dpyinfo->bitmaps = 0;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10383 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
10384 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
10385 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
10386 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
10387 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
10388 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
10389 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
10390 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
10391 dpyinfo->mouse_face_window = Qnil;
36587
d9bb01d5dbbb (note_mouse_highlight): Call mouse_face_overlay_overlaps
Gerd Moellmann <gerd@gnu.org>
parents: 36555
diff changeset
10392 dpyinfo->mouse_face_overlay = Qnil;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10393 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
10394 dpyinfo->mouse_face_defer = 0;
43369
493438ba5e2c (disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents: 43343
diff changeset
10395 dpyinfo->mouse_face_hidden = 0;
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
10396 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
10397 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
10398 dpyinfo->x_highlight_frame = 0;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10399 dpyinfo->image_cache = make_image_cache ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10400
52387
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10401 /* See if we can construct pixel values from RGB values. */
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10402 dpyinfo->red_bits = dpyinfo->blue_bits = dpyinfo->green_bits = 0;
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10403 dpyinfo->red_offset = dpyinfo->blue_offset = dpyinfo->green_offset = 0;
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10404
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10405 if (dpyinfo->visual->class == TrueColor)
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10406 {
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10407 get_bits_and_offset (dpyinfo->visual->red_mask,
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10408 &dpyinfo->red_bits, &dpyinfo->red_offset);
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10409 get_bits_and_offset (dpyinfo->visual->blue_mask,
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10410 &dpyinfo->blue_bits, &dpyinfo->blue_offset);
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10411 get_bits_and_offset (dpyinfo->visual->green_mask,
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10412 &dpyinfo->green_bits, &dpyinfo->green_offset);
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10413 }
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10414
27985
4ba445af210b (x_term_init): Set Colormap member of x_display_info
Gerd Moellmann <gerd@gnu.org>
parents: 27974
diff changeset
10415 /* See if a private colormap is requested. */
27991
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
10416 if (dpyinfo->visual == DefaultVisualOfScreen (dpyinfo->screen))
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
10417 {
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
10418 if (dpyinfo->visual->class == PseudoColor)
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
10419 {
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
10420 Lisp_Object value;
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
10421 value = display_x_get_resource (dpyinfo,
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
10422 build_string ("privateColormap"),
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
10423 build_string ("PrivateColormap"),
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
10424 Qnil, Qnil);
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
10425 if (STRINGP (value)
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
10426 && (!strcmp (SDATA (value), "true")
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
10427 || !strcmp (SDATA (value), "on")))
27991
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
10428 dpyinfo->cmap = XCopyColormapAndFree (dpyinfo->display, dpyinfo->cmap);
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
10429 }
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
10430 }
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
10431 else
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
10432 dpyinfo->cmap = XCreateColormap (dpyinfo->display, dpyinfo->root_window,
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
10433 dpyinfo->visual, AllocNone);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10434
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10435 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10436 int screen_number = XScreenNumberOfScreen (dpyinfo->screen);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10437 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
10438 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
10439 dpyinfo->resy = pixels * 25.4 / mm;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10440 pixels = DisplayWidth (dpyinfo->display, screen_number);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10441 mm = DisplayWidthMM (dpyinfo->display, screen_number);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10442 dpyinfo->resx = pixels * 25.4 / mm;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10443 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10444
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
10445 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
10446 = 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
10447 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
10448 = 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
10449 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
10450 = 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
10451 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
10452 = 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
10453 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
10454 = 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
10455 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
10456 = 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
10457 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
10458 = XInternAtom (dpyinfo->display, "WM_MOVED", False);
52298
1a4bd2bec861 Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents: 52258
diff changeset
10459 dpyinfo->Xatom_wm_client_leader
1a4bd2bec861 Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents: 52258
diff changeset
10460 = XInternAtom (dpyinfo->display, "WM_CLIENT_LEADER", False);
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
10461 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
10462 = 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
10463 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
10464 = 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
10465 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
10466 = 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
10467 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
10468 = XInternAtom (dpyinfo->display, "TEXT", False);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10469 dpyinfo->Xatom_COMPOUND_TEXT
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10470 = XInternAtom (dpyinfo->display, "COMPOUND_TEXT", False);
46882
9c2b3f9ec15a (x_term_init): Initialize dpyinfo->Xatom_UTF8_STRING.
Kenichi Handa <handa@m17n.org>
parents: 46814
diff changeset
10471 dpyinfo->Xatom_UTF8_STRING
9c2b3f9ec15a (x_term_init): Initialize dpyinfo->Xatom_UTF8_STRING.
Kenichi Handa <handa@m17n.org>
parents: 46814
diff changeset
10472 = XInternAtom (dpyinfo->display, "UTF8_STRING", False);
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
10473 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
10474 = 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
10475 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
10476 = 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
10477 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
10478 = 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
10479 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
10480 = 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
10481 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
10482 = 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
10483 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
10484 = 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
10485 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
10486 = 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
10487 /* For properties of font. */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10488 dpyinfo->Xatom_PIXEL_SIZE
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10489 = XInternAtom (dpyinfo->display, "PIXEL_SIZE", False);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10490 dpyinfo->Xatom_MULE_BASELINE_OFFSET
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10491 = 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
10492 dpyinfo->Xatom_MULE_RELATIVE_COMPOSE
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10493 = 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
10494 dpyinfo->Xatom_MULE_DEFAULT_ASCENT
7cde34a6424e (dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents: 17050
diff changeset
10495 = 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
10496
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10497 /* Ghostscript support. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10498 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
10499 dpyinfo->Xatom_DONE = XInternAtom (dpyinfo->display, "DONE", False);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10500
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10501 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
10502 False);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10503
11162
95b70c82ec51 (x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents: 11122
diff changeset
10504 dpyinfo->cut_buffers_initialized = 0;
95b70c82ec51 (x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents: 11122
diff changeset
10505
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
10506 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
10507 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
10508
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10509 {
18705
c4f2eab8e736 (x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents: 18646
diff changeset
10510 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
10511
c4f2eab8e736 (x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents: 18646
diff changeset
10512 null_bits[0] = 0x00;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10513
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10514 dpyinfo->null_pixel
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10515 = XCreatePixmapFromBitmapData (dpyinfo->display, dpyinfo->root_window,
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10516 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
10517 1);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10518 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10519
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10520 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10521 extern int gray_bitmap_width, gray_bitmap_height;
34511
1f69c833e2af (x_term_init): Declare gray_bitmap_bits as `extern
Gerd Moellmann <gerd@gnu.org>
parents: 34449
diff changeset
10522 extern char *gray_bitmap_bits;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10523 dpyinfo->gray
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10524 = XCreatePixmapFromBitmapData (dpyinfo->display, dpyinfo->root_window,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10525 gray_bitmap_bits,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10526 gray_bitmap_width, gray_bitmap_height,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10527 (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
10528 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10529
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10530 #ifdef HAVE_X_I18N
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10531 xim_initialize (dpyinfo, resource_name);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10532 #endif
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10533
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9565
diff changeset
10534 #ifdef subprocesses
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9565
diff changeset
10535 /* 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
10536 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
10537 add_keyboard_wait_descriptor (connection);
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9565
diff changeset
10538 #endif
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
10539
4147
c6657758fb6f * xterm.c (x_term_init): Adjust message printed when we can't
Jim Blandy <jimb@redhat.com>
parents: 3951
diff changeset
10540 #ifndef F_SETOWN_BUG
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10541 #ifdef F_SETOWN
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10542 #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
10543 /* 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
10544 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
10545 #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
10546 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
10547 #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
10548 #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
10549 #endif /* F_SETOWN_BUG */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10550
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10551 #ifdef SIGIO
11994
b4dd8ca308dd (x_term_init): Call init_sigio only if interrupt_input.
Karl Heuer <kwzh@gnu.org>
parents: 11988
diff changeset
10552 if (interrupt_input)
b4dd8ca308dd (x_term_init): Call init_sigio only if interrupt_input.
Karl Heuer <kwzh@gnu.org>
parents: 11988
diff changeset
10553 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
10554 #endif /* ! defined (SIGIO) */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10555
15904
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
10556 #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
10557 #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
10558 /* 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
10559 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
10560 {
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
10561 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
10562 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
10563 Font font;
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10564 int count;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10565
15904
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
10566 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
10567 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
10568 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
10569 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
10570 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
10571 to.addr = (XPointer)&font;
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10572 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
10573 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
10574 abort ();
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
10575 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
10576 XrmPutLineResource (&xrdb, "Emacs.dialog.*.font: 9x15");
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10577 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
10578 }
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
10579 #endif
19021
6f150e46a5fd (x_term_init) [! HAVE_X11R5]: Don't try to use XtCvtStringToFont.
Richard M. Stallman <rms@gnu.org>
parents: 18996
diff changeset
10580 #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
10581
28139
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
10582 /* See if we should run in synchronous mode. This is useful
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
10583 for debugging X code. */
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
10584 {
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
10585 Lisp_Object value;
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
10586 value = display_x_get_resource (dpyinfo,
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
10587 build_string ("synchronous"),
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
10588 build_string ("Synchronous"),
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
10589 Qnil, Qnil);
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
10590 if (STRINGP (value)
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
10591 && (!strcmp (SDATA (value), "true")
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
10592 || !strcmp (SDATA (value), "on")))
28139
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
10593 XSynchronize (dpyinfo->display, True);
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
10594 }
51897
535ddb6daa07 (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, and use the Gtk+
Juanma Barranquero <lekktu@gmail.com>
parents: 51825
diff changeset
10595
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
10596 {
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
10597 Lisp_Object value;
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
10598 value = display_x_get_resource (dpyinfo,
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
10599 build_string ("useXIM"),
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
10600 build_string ("UseXIM"),
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
10601 Qnil, Qnil);
51825
7003a80a49ec (x_term_init) [!USE_XIM]: Use `useXIM' resource to turn on XIM.
Kim F. Storm <storm@cua.dk>
parents: 51823
diff changeset
10602 #ifdef USE_XIM
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
10603 if (STRINGP (value)
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
10604 && (!strcmp (XSTRING (value)->data, "false")
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
10605 || !strcmp (XSTRING (value)->data, "off")))
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
10606 use_xim = 0;
51825
7003a80a49ec (x_term_init) [!USE_XIM]: Use `useXIM' resource to turn on XIM.
Kim F. Storm <storm@cua.dk>
parents: 51823
diff changeset
10607 #else
7003a80a49ec (x_term_init) [!USE_XIM]: Use `useXIM' resource to turn on XIM.
Kim F. Storm <storm@cua.dk>
parents: 51823
diff changeset
10608 if (STRINGP (value)
7003a80a49ec (x_term_init) [!USE_XIM]: Use `useXIM' resource to turn on XIM.
Kim F. Storm <storm@cua.dk>
parents: 51823
diff changeset
10609 && (!strcmp (XSTRING (value)->data, "true")
7003a80a49ec (x_term_init) [!USE_XIM]: Use `useXIM' resource to turn on XIM.
Kim F. Storm <storm@cua.dk>
parents: 51823
diff changeset
10610 || !strcmp (XSTRING (value)->data, "on")))
7003a80a49ec (x_term_init) [!USE_XIM]: Use `useXIM' resource to turn on XIM.
Kim F. Storm <storm@cua.dk>
parents: 51823
diff changeset
10611 use_xim = 1;
7003a80a49ec (x_term_init) [!USE_XIM]: Use `useXIM' resource to turn on XIM.
Kim F. Storm <storm@cua.dk>
parents: 51823
diff changeset
10612 #endif
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
10613 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10614
52298
1a4bd2bec861 Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents: 52258
diff changeset
10615 #ifdef HAVE_X_SM
1a4bd2bec861 Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents: 52258
diff changeset
10616 /* Only do this for the first display. */
1a4bd2bec861 Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents: 52258
diff changeset
10617 if (x_initialized == 1)
1a4bd2bec861 Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents: 52258
diff changeset
10618 x_session_initialize (dpyinfo);
1a4bd2bec861 Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents: 52258
diff changeset
10619 #endif
1a4bd2bec861 Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents: 52258
diff changeset
10620
11997
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
10621 UNBLOCK_INPUT;
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
10622
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10623 return dpyinfo;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10624 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10625
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10626 /* 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
10627 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
10628
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10629 void
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10630 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
10631 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
10632 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10633 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
10634
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10635 /* 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
10636 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
10637 if (! NILP (x_display_name_list)
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
10638 && EQ (XCAR (x_display_name_list), dpyinfo->name_list_element))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
10639 x_display_name_list = XCDR (x_display_name_list);
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10640 else
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10641 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10642 Lisp_Object tail;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10643
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10644 tail = x_display_name_list;
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
10645 while (CONSP (tail) && CONSP (XCDR (tail)))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
10646 {
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
10647 if (EQ (XCAR (XCDR (tail)), dpyinfo->name_list_element))
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10648 {
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39950
diff changeset
10649 XSETCDR (tail, XCDR (XCDR (tail)));
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10650 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10651 }
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
10652 tail = XCDR (tail);
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10653 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10654 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10655
27524
67501e6e8b34 (x_delete_display): Update next_noop_dpyinfo to ensure
Gerd Moellmann <gerd@gnu.org>
parents: 27500
diff changeset
10656 if (next_noop_dpyinfo == dpyinfo)
67501e6e8b34 (x_delete_display): Update next_noop_dpyinfo to ensure
Gerd Moellmann <gerd@gnu.org>
parents: 27500
diff changeset
10657 next_noop_dpyinfo = dpyinfo->next;
67501e6e8b34 (x_delete_display): Update next_noop_dpyinfo to ensure
Gerd Moellmann <gerd@gnu.org>
parents: 27500
diff changeset
10658
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10659 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
10660 x_display_list = dpyinfo->next;
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10661 else
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10662 {
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10663 struct x_display_info *tail;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10664
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10665 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
10666 if (tail->next == dpyinfo)
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10667 tail->next = tail->next->next;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10668 }
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10669
12771
6f07c79d9a05 (x_delete_display) [AIX]: Don't call XRmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 12750
diff changeset
10670 #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
10671 #ifndef AIX /* On AIX, XCloseDisplay calls this. */
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10672 XrmDestroyDatabase (dpyinfo->xrdb);
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10673 #endif
12771
6f07c79d9a05 (x_delete_display) [AIX]: Don't call XRmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 12750
diff changeset
10674 #endif
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10675 #ifdef MULTI_KBOARD
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10676 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
10677 delete_kboard (dpyinfo->kboard);
10652
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
10678 #endif
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10679 #ifdef HAVE_X_I18N
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10680 if (dpyinfo->xim)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10681 xim_close_dpy (dpyinfo);
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10682 #endif
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10683
10652
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
10684 xfree (dpyinfo->font_table);
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
10685 xfree (dpyinfo->x_id_name);
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
10686 xfree (dpyinfo->color_cells);
10652
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
10687 xfree (dpyinfo);
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10688 }
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
10689
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10690 #ifdef USE_X_TOOLKIT
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10691
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10692 /* Atimer callback function for TIMER. Called every 0.1s to process
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10693 Xt timeouts, if needed. We must avoid calling XtAppPending as
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10694 much as possible because that function does an implicit XFlush
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10695 that slows us down. */
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10696
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10697 static void
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10698 x_process_timeouts (timer)
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10699 struct atimer *timer;
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10700 {
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10701 if (toolkit_scroll_bar_interaction || popup_activated ())
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10702 {
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10703 BLOCK_INPUT;
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10704 while (XtAppPending (Xt_app_con) & XtIMTimer)
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10705 XtAppProcessEvent (Xt_app_con, XtIMTimer);
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10706 UNBLOCK_INPUT;
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10707 }
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10708 }
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10709
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10710 #endif /* USE_X_TOOLKIT */
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10711
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10712
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10713 /* 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
10714
50371
45e825260791 Remove unnecessary extern declarations.
Kim F. Storm <storm@cua.dk>
parents: 50327
diff changeset
10715 extern frame_parm_handler x_frame_parm_handlers[];
45e825260791 Remove unnecessary extern declarations.
Kim F. Storm <storm@cua.dk>
parents: 50327
diff changeset
10716
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10717 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
10718 {
50371
45e825260791 Remove unnecessary extern declarations.
Kim F. Storm <storm@cua.dk>
parents: 50327
diff changeset
10719 x_frame_parm_handlers,
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10720 x_produce_glyphs,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10721 x_write_glyphs,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10722 x_insert_glyphs,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10723 x_clear_end_of_line,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10724 x_scroll_run,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10725 x_after_update_window_line,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10726 x_update_window_begin,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10727 x_update_window_end,
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10728 x_cursor_to,
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10729 x_flush,
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10730 #ifndef XFlush
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10731 x_flush,
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10732 #else
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10733 0, /* flush_display_optional */
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10734 #endif
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10735 x_clear_window_mouse_face,
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
10736 x_get_glyph_overhangs,
50097
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
10737 x_fix_overlapping_area,
50151
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
10738 x_draw_fringe_bitmap,
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
10739 x_per_char_metric,
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
10740 x_encode_char,
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
10741 x_compute_glyph_string_overhangs,
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10742 x_draw_glyph_string,
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10743 x_define_frame_cursor,
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10744 x_clear_frame_area,
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10745 x_draw_window_cursor,
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10746 x_draw_vertical_window_border,
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10747 x_shift_glyphs_for_insert
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10748 };
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10749
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
10750 void
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10751 x_initialize ()
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10752 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10753 rif = &x_redisplay_interface;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10754
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10755 clear_frame_hook = x_clear_frame;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10756 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
10757 delete_glyphs_hook = x_delete_glyphs;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10758 ring_bell_hook = XTring_bell;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10759 reset_terminal_modes_hook = XTreset_terminal_modes;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10760 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
10761 update_begin_hook = x_update_begin;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10762 update_end_hook = x_update_end;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10763 set_terminal_window_hook = XTset_terminal_window;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10764 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
10765 frame_up_to_date_hook = XTframe_up_to_date;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
10766 mouse_position_hook = XTmouse_position;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10767 frame_rehighlight_hook = XTframe_rehighlight;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10768 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
10769 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
10770 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
10771 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
10772 judge_scroll_bars_hook = XTjudge_scroll_bars;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
10773
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10774 scroll_region_ok = 1; /* we'll scroll partial frames */
35393
2470cdee5ed8 (x_initialize): Set char_ins_del_ok to 1.
Gerd Moellmann <gerd@gnu.org>
parents: 35367
diff changeset
10775 char_ins_del_ok = 1;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10776 line_ins_del_ok = 1; /* we'll just blt 'em */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10777 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
10778 memory_below_frame = 0; /* we don't remember what scrolls
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10779 off the bottom */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10780 baud_rate = 19200;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10781
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10782 x_noop_count = 0;
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25541
diff changeset
10783 last_tool_bar_item = -1;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10784 any_help_event_p = 0;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10785
4476
e7de1b007447 (x_term_init): Set the hooks before we call Fset_input_mode.
Richard M. Stallman <rms@gnu.org>
parents: 4304
diff changeset
10786 /* 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
10787 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
10788
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10789 #ifdef USE_X_TOOLKIT
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10790 XtToolkitInitialize ();
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
10791
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10792 Xt_app_con = XtCreateApplicationContext ();
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10793
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
10794 /* Register a converter from strings to pixels, which uses
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
10795 Emacs' color allocation infrastructure. */
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
10796 XtAppSetTypeConverter (Xt_app_con,
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
10797 XtRString, XtRPixel, cvt_string_to_pixel,
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
10798 cvt_string_to_pixel_args,
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
10799 XtNumber (cvt_string_to_pixel_args),
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
10800 XtCacheByDisplay, cvt_pixel_dtor);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
10801
12494
bfbe2490dbf0 (x_initialize) [USE_X_TOOLKIT]: Set fallback resources.
Richard M. Stallman <rms@gnu.org>
parents: 12431
diff changeset
10802 XtAppSetFallbackResources (Xt_app_con, Xt_default_resources);
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
10803
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
10804 /* Install an asynchronous timer that processes Xt timeout events
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
10805 every 0.1s. This is necessary because some widget sets use
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
10806 timeouts internally, for example the LessTif menu bar, or the
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
10807 Xaw3d scroll bar. When Xt timouts aren't processed, these
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
10808 widgets don't behave normally. */
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
10809 {
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
10810 EMACS_TIME interval;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
10811 EMACS_SET_SECS_USECS (interval, 0, 100000);
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
10812 start_atimer (ATIMER_CONTINUOUS, interval, x_process_timeouts, 0);
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
10813 }
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
10814 #endif
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10815
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
10816 #ifdef USE_TOOLKIT_SCROLL_BARS
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10817 #ifndef USE_GTK
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
10818 xaw3d_arrow_scroll = False;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
10819 xaw3d_pick_top = True;
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10820 #endif
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10821 #endif
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10822
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
10823 /* 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
10824 original error handler. */
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10825 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
10826 XSetIOErrorHandler (x_io_error_quitter);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10827
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10828 /* Disable Window Change signals; they are handled by X events. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10829 #ifdef SIGWINCH
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10830 signal (SIGWINCH, SIG_DFL);
44763
f6ac4d8b01cd Fix misleading comment after #endif.
Pavel Janík <Pavel@Janik.cz>
parents: 44708
diff changeset
10831 #endif /* SIGWINCH */
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
10832
10743
6977bff3ff38 (x_display_bar_cursor): Use frame's cursor_width.
Richard M. Stallman <rms@gnu.org>
parents: 10652
diff changeset
10833 signal (SIGPIPE, x_connection_signal);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10834 }
395
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
10835
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10836
395
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
10837 void
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
10838 syms_of_xterm ()
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
10839 {
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10840 staticpro (&x_error_message_string);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10841 x_error_message_string = Qnil;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10842
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10843 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
10844 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
10845
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
10846 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
10847 last_mouse_scroll_bar = Qnil;
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
10848
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
10849 staticpro (&Qvendor_specific_keysyms);
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
10850 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
10851
44626
404f74d6dc4a (Qlatin_1, Qutf_8): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44533
diff changeset
10852 staticpro (&Qutf_8);
404f74d6dc4a (Qlatin_1, Qutf_8): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44533
diff changeset
10853 Qutf_8 = intern ("utf-8");
404f74d6dc4a (Qlatin_1, Qutf_8): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44533
diff changeset
10854 staticpro (&Qlatin_1);
404f74d6dc4a (Qlatin_1, Qutf_8): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44533
diff changeset
10855 Qlatin_1 = intern ("latin-1");
404f74d6dc4a (Qlatin_1, Qutf_8): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44533
diff changeset
10856
15803
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
10857 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
10858 last_mouse_press_frame = Qnil;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10859
37153
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
10860 DEFVAR_BOOL ("x-use-underline-position-properties",
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39973
diff changeset
10861 &x_use_underline_position_properties,
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39973
diff changeset
10862 doc: /* *Non-nil means make use of UNDERLINE_POSITION font properties.
42206
0f4506820432 Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents: 41837
diff changeset
10863 nil means ignore them. If you encounter fonts with bogus
39914
91951fb5b9e5 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39821
diff changeset
10864 UNDERLINE_POSITION font properties, for example 7x13 on XFree prior
91951fb5b9e5 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39821
diff changeset
10865 to 4.1, set this to nil. */);
37153
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
10866 x_use_underline_position_properties = 1;
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
10867
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39973
diff changeset
10868 DEFVAR_LISP ("x-toolkit-scroll-bars", &Vx_toolkit_scroll_bars,
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39973
diff changeset
10869 doc: /* What X toolkit scroll bars Emacs uses.
39914
91951fb5b9e5 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39821
diff changeset
10870 A value of nil means Emacs doesn't use X toolkit scroll bars.
91951fb5b9e5 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39821
diff changeset
10871 Otherwise, value is a symbol describing the X toolkit. */);
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
10872 #ifdef USE_TOOLKIT_SCROLL_BARS
34869
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
10873 #ifdef USE_MOTIF
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
10874 Vx_toolkit_scroll_bars = intern ("motif");
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
10875 #elif defined HAVE_XAW3D
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
10876 Vx_toolkit_scroll_bars = intern ("xaw3d");
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10877 #elif USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10878 Vx_toolkit_scroll_bars = intern ("gtk");
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10879 #else
34869
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
10880 Vx_toolkit_scroll_bars = intern ("xaw");
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
10881 #endif
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
10882 #else
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
10883 Vx_toolkit_scroll_bars = Qnil;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10884 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10885
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10886 staticpro (&last_mouse_motion_frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10887 last_mouse_motion_frame = Qnil;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10888
43302
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10889 Qmodifier_value = intern ("modifier-value");
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10890 Qalt = intern ("alt");
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10891 Fput (Qalt, Qmodifier_value, make_number (alt_modifier));
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10892 Qhyper = intern ("hyper");
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10893 Fput (Qhyper, Qmodifier_value, make_number (hyper_modifier));
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10894 Qmeta = intern ("meta");
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10895 Fput (Qmeta, Qmodifier_value, make_number (meta_modifier));
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10896 Qsuper = intern ("super");
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10897 Fput (Qsuper, Qmodifier_value, make_number (super_modifier));
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10898
43302
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10899 DEFVAR_LISP ("x-alt-keysym", &Vx_alt_keysym,
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10900 doc: /* Which keys Emacs uses for the alt modifier.
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10901 This should be one of the symbols `alt', `hyper', `meta', `super'.
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10902 For example, `alt' means use the Alt_L and Alt_R keysyms. The default
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10903 is nil, which is the same as `alt'. */);
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10904 Vx_alt_keysym = Qnil;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10905
43302
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10906 DEFVAR_LISP ("x-hyper-keysym", &Vx_hyper_keysym,
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10907 doc: /* Which keys Emacs uses for the hyper modifier.
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10908 This should be one of the symbols `alt', `hyper', `meta', `super'.
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10909 For example, `hyper' means use the Hyper_L and Hyper_R keysyms. The
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10910 default is nil, which is the same as `hyper'. */);
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10911 Vx_hyper_keysym = Qnil;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10912
43302
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10913 DEFVAR_LISP ("x-meta-keysym", &Vx_meta_keysym,
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10914 doc: /* Which keys Emacs uses for the meta modifier.
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10915 This should be one of the symbols `alt', `hyper', `meta', `super'.
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10916 For example, `meta' means use the Meta_L and Meta_R keysyms. The
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10917 default is nil, which is the same as `meta'. */);
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10918 Vx_meta_keysym = Qnil;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10919
43302
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10920 DEFVAR_LISP ("x-super-keysym", &Vx_super_keysym,
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10921 doc: /* Which keys Emacs uses for the super modifier.
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10922 This should be one of the symbols `alt', `hyper', `meta', `super'.
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10923 For example, `super' means use the Super_L and Super_R keysyms. The
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10924 default is nil, which is the same as `super'. */);
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10925 Vx_super_keysym = Qnil;
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10926
48085
1c06bf924a62 (Qeql): Declare.
Dave Love <fx@gnu.org>
parents: 48025
diff changeset
10927 DEFVAR_LISP ("x-keysym-table", &Vx_keysym_table,
1c06bf924a62 (Qeql): Declare.
Dave Love <fx@gnu.org>
parents: 48025
diff changeset
10928 doc: /* Hash table of character codes indexed by X keysym codes. */);
1c06bf924a62 (Qeql): Declare.
Dave Love <fx@gnu.org>
parents: 48025
diff changeset
10929 Vx_keysym_table = make_hash_table (Qeql, make_number (900),
1c06bf924a62 (Qeql): Declare.
Dave Love <fx@gnu.org>
parents: 48025
diff changeset
10930 make_float (DEFAULT_REHASH_SIZE),
1c06bf924a62 (Qeql): Declare.
Dave Love <fx@gnu.org>
parents: 48025
diff changeset
10931 make_float (DEFAULT_REHASH_THRESHOLD),
1c06bf924a62 (Qeql): Declare.
Dave Love <fx@gnu.org>
parents: 48025
diff changeset
10932 Qnil, Qnil, Qnil);
395
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
10933 }
14694
41de9b2640a1 (X_CONNECTION_LOCK_FLAG): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 14692
diff changeset
10934
39096
6d69f5cca0cf Comment fix.
Gerd Moellmann <gerd@gnu.org>
parents: 39094
diff changeset
10935 #endif /* HAVE_X_WINDOWS */
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52387
diff changeset
10936
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52387
diff changeset
10937 /* arch-tag: 6d4e4cb7-abc1-4302-9585-d84dcfb09d0f
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52387
diff changeset
10938 (do not change this comment) */